Webスクレイピングとは、インターネット上の情報を自動的に抽出して収集する技術です。しかし、一部のWebページは、JavaScriptを使用して動的なコンテンツを生成するため、通常のWebスクレイピングツールだけでは対応できません。このような場合でも、Seleniumを使用してスクレイピングを行うことができます。Seleniumは、Webブラウザを制御するためのツールであり、自動化テストのために開発されました。以下では、PythonでSeleniumを使用してJavaScriptを含むWebページをスクレイピングする方法を説明します。
環境の準備
事前にSeleniumとwebドライバーの準備が必要です。インストール済みの場合はスキップして下さい。
Seleniumのインストール
Seleniumを使用するには、まずSeleniumをインストールする必要があります。Seleniumは、pipを使用して簡単にインストールできます。
pip install selenium
WebDriverのインストール
WebDriverは、Webブラウザを制御するためのSeleniumの一部です。使用するWebブラウザに応じて、適切なWebDriverをインストールする必要があります。たとえば、Google Chromeを使用する場合は、以下のコマンドを使用してChromeDriverをインストールします。
pip install chromedriver-binary
スクレイピングの手順
JavaScriptを含むページのスクレイピングはページへのアクセス、要素の取得・操作、ページ情報の取得の順に進めていきます。以下に手順を解説します。
Webページのアクセス
次に、アクセスするWebページを指定する必要があります。以下では、例としてGoogleのトップページにアクセスしています。
from selenium import webdriver # Chromeを起動する browser = webdriver.Chrome() # Googleのトップページにアクセスする browser.get('https://www.google.com/')
Webページの要素の取得
JavaScriptを含むWebページをスクレイピングするには、Webページの要素を取得する必要があります。Seleniumを使用すると、XPathを使用してWebページの要素を取得できます。以下は、Googleの検索ボックスを取得するためのコードです。
# 検索ボックスを取得する search_box = browser.find_element_by_xpath('//input[@name="q"]')
Webページの要素の操作
Webページの要素を取得したら、その要素を操作することができます。たとえば、検索ボックスにテキストを入力することができます。以下は、Googleの検索ボックスに"Python"と入力するためのコードです。
# テキストを入力する search_box.send_keys('Python')
応用: Webページのスクロール
JavaScriptを使用するWebページの場合、一部のコンテンツが動的に生成されることがあります。Seleniumを使用してWebページをスクレイピングする場合、ページをスクロールする必要があるかもしれません。以下は、Googleの検索結果ページをスクロールするためのコードです。
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time # Chromeを起動する browser = webdriver.Chrome() # Googleの検索結果ページにアクセスする browser.get('https://www.google.com/search?q=Python') # ページを下にスクロールする body = browser.find_element_by_tag_name('body') for i in range(5): body.send_keys(Keys.PAGE_DOWN) time.sleep(1)
Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド-【電子書籍】[ 加藤耕太 ]
応用: ページの情報の取得
Seleniumを使用してWebページをスクレイピングする場合、ページの情報を取得することができます。たとえば、Googleの検索結果ページから、検索結果のタイトルとURLを取得することができます。以下は、Googleの検索結果ページから、最初の10個の検索結果のタイトルとURLを取得するためのコードです。
from selenium import webdriver # Chromeを起動する browser = webdriver.Chrome() # Googleの検索結果ページにアクセスする browser.get('https://www.google.com/search?q=Python') # 検索結果を取得する results = browser.find_elements_by_xpath('//div[@class="g"]') # 最初の10個の検索結果のタイトルとURLを取得する for result in results[:10]: title = result.find_element_by_xpath('.//h3').text url = result.find_element_by_xpath('.//a').get_attribute('href') print(title) print(url)
まとめ
以上が、Seleniumを使用してJavaScriptを含むWebページをスクレイピングする方法です。Seleniumを使用すると、動的なWebページをスクレイピングすることができるため、Webスクレイピングの幅が広がります。ただし、Seleniumを使用する場合は、Webドライバーをインストールする必要があるため、セットアップが少し複雑になります。また、Webドライバーを使用すると、Webページの読み込みが遅くなる可能性があるため、大量のデータをスクレイピングする場合は、別の方法を検討する必要があります。最後にPythonの学習に利用できるUdemy のサイトを紹介します。ぜひ活用ください。
[PR]