はじめに
WEBサイトをスクレイピングするとき、selenium(Python)でよく使っているもののメモ
動作環境:Windows11 Python3.8
モジュール: selenium, webdriver-manager(ver3.5.4)
指定したURLのページソース全体を取得する
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
# seleniumをヘッドレスで起動、webdriverは自動取得、ブラウザはGoogleChrome
# 引数はURL、返り値はページソース
def source_code_get(url):
# オプション設定
options = webdriver.ChromeOptions()
# ↓ ヘッドレスモードで起動するオプション
options.add_argument("--headless")
# webdriverの自動更新
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
# 暗黙的待機
driver.implicitly_wait(60)
driver.get(url)
source_code = driver.page_source
driver.quit()
return source_code
# 【動作テスト】
if __name__ == '__main__':
# キーワードでURLクエリ生成
keyword = 'python'
url = f'https://www.google.co.jp/search?q={keyword}'
# ページソース抽出
source_code = source_code_get(url)
print(source_code)
seleniumでスクレイピングを行うガイドには良くChromedriverをインストールして
ドライバーのpathを指定し、ブラウザを操作するような使用法が紹介されていますが、
その方法を使うと、ブラウザのバージョンがアップデートされると利用できなくなるため、Chromedriverは自動的にアップデートされるようにするのが合理的です。
そこでwibdriver-namegerというモジュールを導入し、自動アップデートを実現します。
# ↓ ヘッドレスモードで起動するオプション
options.add_argument("--headless")
・ブラウザのヘッドレス起動
オプションを”--headress”に指定することにより、ブラウザ画面が開かずに動作させることができます。
ブラウザが起動した状態にしたい場合は、コメントアウトするだけでOKです。
・暗黙的待機
指定したページソースが読み込まれるまで次の動作を待機します。
すぐに読み込まれれば次の動作へ移行します。パラメーターが60になっているので最大60秒待機します。
webdriver-manager インストール
pip install webdriver-manager == 3.5.4
webdriver-managerをインポートすることにより、この場合、Chromedriverを自身でダウンロードして配置しなくても自動でインストールとアップデートによる更新を自動で行ってくれます。
【ハマったとこ】
Pythonのバージョンによっては、最新のwevdriver-managerをインストールするとエラーは出ないのに動かない現象がありました。その場合はバージョンを過去分に戻してみるといいです。
上記のバージョンも自分の環境で使用できた過去のバージョンを敢えて使っています。
関数化
if __name__ == '__main__':
# キーワードでURLクエリ生成
keyword = 'python'
url = f'https://www.google.co.jp/search?q={keyword}'
# ページソース抽出
source_code = source_code_get(url)
print(source_code)
関数化して手早くソースコードが取得できるようにします。
上記コードの場合、google検索にキーワードを入れ、ターゲットとするURLを作成、
出来たURLを作った関数の引数に代入するとソースコードが取り出せます。
取り出せたコードはそのままBeautifulsoupなどで要素を取り出せます。
ここまではどのスクレイピングでも行う事ですので関数化しておくと便利です。
次回、コピペでスクレイピング② クラウドワークスの新着情報を収集 へ続きます