【Python seleniumを使ったWebスクレイピング】モジュールとドライバのインストール方法。JavaScript部分のソースはこれで取得する
スポンサーリンク
requestsとBeautifulSoupというモジュールを使ったスクレイピングでは、こんな感じでサクッとHTMLを取得する。
import requests from bs4 import BeautifulSoup url = "https://www.hogehoge/" # URL r = requests.get(url) soup = BeautifulSoup(r.text, "html.parser") elements = soup.find_all('div', class_='area')
しかし、HTMLのソースが以下のように、JavaScriptなどを実行した結果が埋め込まれるようにしていると、うまく取得できない。
<div class="area">{{:text}}</div> <!-- この{:text}の結果がほしい -->
こういうときは、requestsの代わりに「selenium」を使う。
seleniumなら、ブラウザを使ってアクセスするため、JavaScriptなど実行されたソースが取得できる。
もちろん、その分取得に時間がかかるのだがそれはしょうがない。
この「selenium」は、Anacondaには入っておらず、かつこれをインストールするだけではだめ(ドライバが必要)だったので、その導入と使い方を記録する。
今回の内容はこんな感じ
- STEP1 : seleniumが入っていないか確認する
- STEP2 : seleniumをインストールする
- STEP3 : とりあえずブラウザ起動するかチェック(失敗します)
- STEP4 : Homebrewでchromedriverを取得
- STEP5 : 再度ブラウザ起動するかチェックする(今度は成功)
- STEP6 : URLを指定してアクセスしてみる
- おまけ : ブラウザ表示しないで使用する(Headless Chrome)
スポンサーリンク
STEP1 : seleniumが入っていないか確認する
「いや、入っていないんでしょ?」とは言わずに、一応チェックがしてみる。
以下のコマンドでインストール済みのモジュールを確認する。
$ pip list ... ruamel-yaml 0.15.35 scikit-image 0.13.1 scikit-learn 0.19.1 scipy 1.1.0 seaborn 0.8.1 Send2Trash 1.5.0 setuptools 39.1.0 simplegeneric 0.8.1 singledispatch 3.4.0.3 ...
はい、「selenium」ないね。
おとなしく、以下のドキュメントに沿って、導入していく。
kurozumi.github.io
STEP2 : seleniumをインストールする
以下のコマンドでインストール。
$ pip install selenium ... Successfully installed selenium-3.141.0 You are using pip version 10.0.1, however version 19.0.3 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
よし、成功!
(pipのバージョンが古いからアップグレードしろって言われている気がする。。。後でやろう)
STEP3 : とりあえずブラウザ起動するかチェック(失敗します)
まずこの状態で、seleniumを使ったブラウザの起動ができるか確認してみる。
そのためのコードは以下の2行のみ
from selenium import webdriver browser = webdriver.Chrome()
すると、次のようにエラーになる。
※Jupyterを使った確認テスト
... FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver'; 'chromedriver' During handling of the above exception, another exception occurred: ...
「chromedriverがない」「例外発生しているぞ」みたいな感じになっている。
ということで、やっぱりおとなしくドライバを取得する。
STEP4 : Homebrewでchromedriverを取得
chromedriverを取得していく。
ちなみに、上記のコードのこの部分
browser = webdriver.Chrome()
というように、Chromeを使うようにしているので、chromedriverが必要なわけであって、Firefoxなど他のブラウザではそれようのドライバです。あしからず。
他のブラウザを希望の場合はドキュメントを確認してください。
また、Windowsも取得方法や使い方が若干ことなるのでそちらも合わせでご確認ください。
1. インストール — Selenium Python Bindings 2 ドキュメント
さて、MacではこのドライバをHomebrewで取得していく。
まず、Homebrewをアップデートしておく。
$ brew update
※Homebrewのインストールについて記事も書いているので、未取得の方はこちらをどうぞ
ahrk-izo.hatenablog.com
chromedriverは、以下のコマンドで取得する(失敗します)
$ brew install chromedriver
Error: No available formula with the name "chromedriver"
It was migrated from homebrew/core to homebrew/cask.
You can access it again by running:
brew tap homebrew/cask
And then you can install it by running:
brew cask install chromedriver
おっと!エラーになった!
でも慌てない。
エラー文を読んで見ればちゃんとわかる!
英語が苦手なら(ぼくも)、Google翻訳にコピペしてもなんとなくわかる。
どうやら、「homebrew/cask」ってところに移行されたようだ。
で、以下の2つのコマンドを実行すればよさそう
$ brew tap homebrew/cask (これでアクセスして) $ brew cask install chromedriver (これでインストールする)
では改めてやってみる。
アクセスOK!
取得OK!
(途中パスワード聞かれるが、これはPCのパスワードを入力してreturnでOK)
よく見ると、/usr/local/bin にリンク(エイリアス)入ったんだなということがわかる。
念の為確認しとく。
$ ls /usr/local/bin
OK。いた。
STEP5 : 再度ブラウザ起動するかチェックする(今度は成功)
STEP3と同様のコードで起動確認する。
from selenium import webdriver browser = webdriver.Chrome()
※Jupyterでは実行するとき、「control + return」または「shift + return」
よし。成功!
URLは指定していないので、ブラウザの中身は空の状態。
最後に、URLを指定してページにアクセスできるか確認してみる。
スポンサーリンク
STEP6 : URLを指定してアクセスしてみる
Googleさんのページ(https://www.google.co.jp/)にアクセスしてみましょ。
from selenium import webdriver browser = webdriver.Chrome() browser.get('https://www.google.co.jp/') browser.quit()
実行すると・・・
はい。OK!
最後に、このコードでブラウザを終了させることを忘れないように!
ゾンビプロセスが残っちゃうので。Jupyterじゃなくても。
browser.quit()
おまけ : ブラウザ表示しないで使用する(Headless Chrome)
seleniumとドライバを使って、ブラウザ経由でソースを取得するけど、ブラウザは表示させない方法もあるので、その書き方も記述する。
(「Headless Chrome」っていうらしい)
以下のコードでOK
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument('--headless') browser = webdriver.Chrome(options=options) browser.get('https://www.google.co.jp/') # # Webスクレイピングの処理 # browser.quit()
ブラウザが表示されなかったけど、これでもちゃんとソースが取得できて、Webスクレイピングできた。
便利だね!
実際のスクレイピングのやり方はドキュメントを見たり、いっぱい記事があるので、いろいろやってみましょう!
以上。