Selenium基本操作#1(#Jupyter)
スクレイピングを実行するためのライブラリは、requests + BeautifulSoup のような軽量な組み合わせから、Scrapy など多岐に存在する。その中で Selenium は、Webブラウザを自動操作することで動的コンテンツに対応できる点が特徴である。ただし、ブラウザ制御に伴うオーバーヘッドがあるため、用途によっては他の手法が適している場合もある。基本的にSeleniumを実行する際には、Docker 上に Selenium の実行環境を構築することで、ローカル環境を汚さず、再現性の高いデータ取得フローを実現することが望ましい。
個人的にSeleniumを利用するケース
- WEBサイトがJavaScriptで構成されている(⇔requests + BeautifulSoup)
- 階層構造が1つ以内で取得データが存在する(⇔Scrapy)
- スクレイピング対象の取得データ数が膨大でないこと(⇔Scrapy)
- 「Cloudflare」を導入しているサイト(対応ムズイがブラウザ操作なら突破できる)
これらの条件が揃っている場合、Docker 上に Selenium + JupyterLab の環境を構築することで、ローカル環境を汚さず、再現性の高いデータ取得フローを実現できる。
#必須コード#
from selenium import webdriver
def action_selenium():
user_agent = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--start-maximized')
options.add_argument("--disable-dev-shm-usage")
options.add_argument('--user-agent=' + user_agent)
driver = webdriver.Chrome(options=options)
driver.get(url)
- SeleniumをDockerコンテナで立ち上げたJupyterのセルから操作するのに必要なコード
- 「user_agent」は、利用者のPCで確認すること
- Seleniumの基本操作については#2の記事にメモしている
#取得ページを解析する#
from bs4 import BeautifulSoup
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, 'html.parser')
関数を実行し、Selenium経由でスクレイピング対象のページが正しく表示・取得できていることを確認できたら、あとは BeautifulSoup を用いて、目的のデータを抽出していくだけです。ページ構造に応じて、クラス名やタグを指定し、必要な情報を効率よく取得できるようにコーディングしていくだけです。
コメント(一覧)