PythonでWebスクレイピングを行う際、一般的にはrequests
とBeautifulSoup
の組み合わせがよく使われます。しかし、この方法ではJavaScriptで動的に生成されるWebページの情報を取得することができません。
そこで、JavaScriptを実行した後のHTMLを取得するために、Selenium WebDriver
やrequests-html
といったツールが利用されます。
Selenium WebDriver
はブラウザを操作することで、ブラウザと同じ表示内容を取得できます。一方、requests-html
は内部でpyppeteer
を利用し、ヘッドレスブラウザ(インターフェースなしのブラウザ)を使うことでブラウザの表示内容を取得できます。
以下に、requests-html
を用いてJavaScriptが実行された後のHTMLから情報を取得するPythonコードの例を示します。
from requests_html import HTMLSession
url = "https://search.yahoo.co.jp/realtime" # セッション開始
session = HTMLSession()
r = session.get(url)
# ブラウザエンジンでHTMLを生成させる
r.html.render()
# スクレイピング
ranking_rows = r.html.find("div.lst.cf")
ranking_list = []
if ranking_rows: # 1〜5位だけを取得
ranking_top5 = ranking_rows[0].find("p.que_3")
for item in ranking_top5:
ranking_list.append(item.text[2:])
print(ranking_list)
このコードは、Yahoo!リアルタイム検索から、1〜5位までをスクレイピングで取得します。
以上のように、PythonとJavaScriptの連携により、より高度なWebスクレイピングが可能となります。これにより、PythonのWebスクレイピングの可能性がさらに広がります。.