Stimulator

機械学習とか好きな技術話とかエンジニア的な話とかを書く

Pythonでseleniumとheadless chromeでWebページの情報を取得する (Ubuntu 16.04)

- はじめに -

Chrome 59が正式版となりheadless版も正式に動き始めました。めでたい。

New in Chrome 59  |  Web  |  Google Developers

headless chromeUbuntuに導入してPythonから触ったという記事です。

端的に導入だけです。

こんな記事もあったので。

www.infoq.com


- インストール -

まずPythonからの起動に必要なchromedriverを取得しておきます。
apt-getでも入りますが最新版が欲しいので以下のように。
(記事書いた当時で最新版は2.29)

wget https://chromedriver.storage.googleapis.com/2.29/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/local/bin/


依存ライブラリとなるlibappindicator1をインストールしておきます。
事前にやらないとハマるっぽいので、先走ったら後述で入れたChromeをアンインストールしてやり直すのが良いです。

sudo apt-get install libappindicator1


Chromedebパッケージを取得してきます。
公式ページに行くと、小さな文字で「Google Chrome をインストールすると Google レポジトリが追加され、Google Chrome がシステムで自動更新されます。Google のレポジトリを追加したくない場合は、パッケージをインストールする前に「sudo touch /etc/default/google-chrome」を実行してください。」と書かれています。
スクレイピング等ガンガン回したい場合などはやっておくべきでしょう。(やらなくてもOK)

sudo touch /etc/default/google-chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb


以下でインストールします。

sudo dpkg -i google-chrome-stable_current_amd64.deb


この時以下のようなエラーが出るかもしれません。

Errors were encountered while processing:
google-chrome-stable


その時はapt-getでこうしてこう。

sudo apt-get install -f
sudo dpkg -i google-chrome-stable_current_amd64.deb


インストールおわりです。


- Pythonで実行 -

Python3.xを使います。2系は小学生にバカにされるからです。
seleniumのwebdriver配下にchrome.optionsというのがあるのでそれを利用して、--headlessを指定します。
gpuが載ってない場合は--disable-gpuも指定しておきます。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=options)
driver.get('hogehoge.com')
print(driver.page_source)

後はPhontomJS等と同じように使えます。


driver.save_screenshotしてみたら以下のように

f:id:vaaaaaanquish:20170606194222p:plain



以下曰くPythonだとNotificationのPopUpが出るので設定しておいた方が良いっぽい(未確認)。



あと多分デフォルトだとUbuntuのフォントが足りず文字化けする。
私は導入済み。以下参考。


- おわりに -

今までPythonでWebスクレイピングというとPhontomJSなるブラウザが圧倒的シェアでした。

しかしPhontomJSもなかなかバギーで、プロセスがゾンビ化するなどの問題を抱えていました。

headless chromeに関する日本語ページが更新されるなど、期待が高まっていたここ半年です。

このままheadless chromeが希望の星となる事を期待しています。


最近はWebテストスクレイピングにお熱なので、いつかそこで溜まった知見も記事にしたいと思っています。