こんにちは。阿形です。
PythonでWebスクレイピングの第2回です。
前回の記事で、PythonでWebスクレイピングをやるには2つの方法があると書きました。おさらいで以下にもう一度書いておきます。
今回から、この2つのうち応用範囲が広い「PythonでWebブラウザを制御」する方を説明していこうと思います。
前回実行環境を整えたので、その環境で実行する前提で話を進めます。
PythonでWebブラウザを制御する場合、Seleniumを使用しますので、まずはSeleniumの基本設定をやってみましょう。
といっても、前回動作確認をやった内容そのままです。
$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from selenium import webdriver
>>> from selenium.webdriver.chrome.options import Options
>>> import chromedriver_binary
>>> options = Options()
>>> options.binary_location = '/usr/bin/chromium-browser'
>>> driver = webdriver.Chrome(options=options)
Pythonを対話モードで起動していますが、スクレイピングの動作を確認しているときは非常に有用です。スクレイピングの動作を確認する段階は、対話モードで起動して、逐一操作していくのをおすすめします。
後で出てきますが、ソースを読み込んだときにAjaxの動作の関係で思ったようなソースでなかったり、ブラウザの動作タイミングで上手くデータが取れなかったりといったことが発生することがあるので、一通りの動作確認ができるまでは対話モードで動作確認をしていくと良いと思います。
さて、上記のソースを順番に見ていきます。
最初の3行はさほど説明はいらないと思います。
ここで必要なselenium、chromedriverを読み込んでいます。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import chromedriver_binary
続く3行はブラウザのオプションを設定しています。
まずoptionsインスタンスを生成します。
options = Options()
次の行はブラウザのパスを設定しています。
これのみOptionsで必須の設定です。これを設定しないとブラウザがどこにあるのかわからず、起動することができません。
options.binary_location = '/usr/bin/chromium-browser'
optionsインスタンスでオプションを設定したあとに、webdriverによりブラウザを起動します。
driver = webdriver.Chrome(options=options)
Optionsは他にもいろいろなブラウザの設定が行なえます。
スクレイピングで有用なものをいくつか挙げておきます。
prefs = {"download.default_directory": '/home/user/downloads'}
options.add_experimental_option('prefs', prefs)
辞書型の変数prefsで、download.default_directoryに対してディレクトリパスを設定しています。これをprefsオプションで設定することでデフォルトのダウンロードディレクトリを変更することができます。
ファイルのダウンロード先を指定しておきたい場合に有用です。
スクレイピングでファイルをダウンロードする場合は必ず設定します。
指定しないとデフォルトのディレクトリに保存されると思ったら、どこに保存されたのかわからなくなりました…。詳しくは調べられていませんが、Seleniumから起動した場合、ユーザーのブラウザ設定を読み込まず、まっさらな状態で起動するようなので、デフォルトだとディレクトリ設定が空になっているのかもしれません。
options.add_argument('--headless')
add_argumentはコマンドラインで指定するオプションをそのまま付与するものです。
–headlessはchromiumをヘッドレスモードで起動します。
ヘッドレスモードというのは、ブラウザのウィンドウを開かずバックグラウンドで処理を行うことができるモードです。ウィンドウを開くとデスクトップ環境では開いたウィンドウがアクティブウィンドウとなり、他の操作ができなくなってしまうので、バックグラウンドで処理しつつつ他の作業を行いたい場合に便利です。
ただ、まれにヘッドレスモードでうまく動かないページがあるようですので、動作に問題がないかよく確認してから使用することをおすすめします。
options.add_argument('--disable-popup-blocking')
同じくadd_argumentでの設定です。
–disable-popup-blockingはポップアップブロック機能を無効にする設定です。
ウィンドウのポップアップを使用しているサイトではこちらを設定しておく必要があります。でないと、ポップアップがブロックされてしまってうまく動作しません。
今回はここまでです。
ブラウザの設定は特に難しいところはないと思います。
次回からは実際にページを読み込んで操作を行っていく部分を書きたいと思います。