PythonでWebブラウザーを経由したスクレイピングを行うために、以下の本を参考にしました。
Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう
その中でブラウザーを使用したスクレイピングの例として、Selenium + PhantomJSを使用するやり方が紹介されていました。
本ではDocker上にUbuntuを構築していましたが、WindowsでもできそうだったのでそのままWindowsで試してみることにしました。
環境を整えたあとで、試しにウェブページのスクリーンショットを取る簡単なプログラムを書いて動かしたのですが、なんと警告が出てしまいました。
UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
最初はエラーかと思ったのですが、きちんとスクリーンショットは取れているようです。
警告メッセージを読んで見ると、
「PhantomJSのSeleniumのサポートは廃止されたので、代わりにChromeまたはFirefoxのヘッドレスバージョンを利用してください」
と書いてあるではありませんか。
どうやらすでにPhantomJSのSeleniumのサポートされていないようです。
本に書いてあることが古くてもう使えないことは日常茶飯事なので、慌てずにサクッとgoogleで検索します。
すぐにChromeのヘッドレスブラウザとして、Headless Chromeというものがあることが分かりました。
PhantomJSの代わりにHeadless Chromeを使ってみることにします。
参考:SeleniumからHeadless Chromeを使ってみた
https://qiita.com/orangain/items/db4594113c04e8801aad
前置きが長くなりました。
以下にPythonとSeleniumでHeadless Chromeを使ったやり方を記録しておきます。
環境構築2h>
①pipでSeleniumをインストール
pycharmのターミナルで以下を実行します。
pip install selenium
普通にコマンドプロンプトからでも大丈夫です。
②chromeドライバをダウンロード
https://sites.google.com/a/chromium.org/chromedriver/downloads
(バージョンはChromeDriver 2.37)
windows版は32ビット版しかないので、32ビット版をダウロード
解凍して任意の場所に置きます。
とりあえずCドライブの直下に置きました。
C:\chromedriver_win32
③chromeドライバのPathを通す
環境変数のPathにchromeドライバが置いてあるパスを追加します。
「コントロールパネル」-「システム」-「システムの詳細設定」-「環境変数」
システムの環境変数にある、Pathを選択して「編集」
「新規」からchromeドライバが置いてあるパスを追加
↑一番下に「C:\chromedriver_win32」が追加されています。
簡単に書きましたが、Pathの通し方がわからない人は
「windows10 path 設定」などで検索してください。
Headless Chromeでスクリーンショットを取得
from selenium import webdriver from selenium.webdriver.chrome.options import Options url = 'https://www.python.org/' options = Options() options.add_argument('--headless') browser = webdriver.Chrome(chrome_options=options) browser.implicitly_wait(3) browser.get(url) browser.save_screenshot('python.png') browser.quit()
警告が出ずにスクリーンショットが取れました。
また、ブラウザも表示されませんでした。
ちなみに、–healessオプションを消すとブラウザが表示されます。
from selenium import webdriver url = 'https://www.python.org/' browser = webdriver.Chrome() browser.implicitly_wait(3) browser.get(url) browser.save_screenshot('python.png') browser.quit()
参考:PhantomJSでスクリーンショットを取得
参考までに、PhantomJSを使った方法も書いておきます。
①pipでSeleniumをインストール
②PhantomJSのダウンロード
http://phantomjs.org/download.html
windowsを選択してzipファイルをダウンロードします。
解凍して適当な場所に格納します。
環境変数からPathを通します。
③ソースコード
from selenium import webdriver url = 'https://www.python.org/' browser = webdriver.PhantomJS() browser.implicitly_wait(3) browser.get(url) browser.save_screenshot('python.png') browser.quit()
この記事へのコメントはありません。