Warning: Undefined variable $position in /home/pystyles/pystyle.info/public_html/wp/wp-content/themes/lionblog/functions.php on line 4897

スクレイピング – Selenium の使い方

スクレイピング – Selenium の使い方

概要

Selenium はブラウザ操作をエミュレーションするツールです。Javascript を利用して動的にコンテンツを生成しているサイトのスクレイピングやログインフォームの自動ログインなどに利用できます。

Advertisement

導入方法

ブラウザを動作させるので、GUI 環境 である必要があります。 Selenium を使用したスクレイピングを行うには、次の3つが必要になります。

  • Selenium
  • Chromium Driver
  • Chromium (Google Chrome で可)

Chromium Driver は Selenium とブラウザを中継するドライバです。

Chromium Driver

確認した環境

  • Windows 10 64bit
  • Google Chrome 87.0.4280.141
  • Python 3.8.3

Selenium のインストール

pip install selenium でインストールできます。

Chromium Driver のインストール

まず、使用しているブラウザのバージョンを確認してください。ツールバーのメニューから「ヘルプ」を選択することで Google Chrome のバージョンを確認できます。

ブラウザのバージョン

今回の例だと、バージョン88になります。バージョンを確認できたら、対応するバージョン及び OS の ChromeDriver を Downloads – ChromeDriver からダウンロードします。

  • chromedriver_linux64.zip: Linux
  • chromedriver_mac64.zip: Mac
  • chromedriver_win32.zip: Windows

ダウンロードして解凍すると、chromedriver.exe が入っているので、これを適当な場所 (例: F:\chromedriver\88) に配置します。

chromedriver.exe を適当な場所に配置する

配置したら、このディレクトリの場所 (例: F:\chromedriver\88) を環境変数 Path に追加します。

環境変数名の編集を開く

Path に追加する

環境変数を設定したら、一度 PC を再起動してください。以上で準備は完了です。

Advertisement

Selenium を試してみよう

Google のトップページにアクセスし、検索ボックスに「ChromeDriver」と入力して検索を行うデモコードを紹介します。 下記コードを実行すると、ブラウザが立ち上がり動作が開始されると思います。動作中はマウスやキーボード操作は行わないようにしてください。

In [ ]:
import time
from selenium import webdriver

driver = webdriver.Chrome()

# Google にアクセスする。
driver.get("https://www.google.com/")

# Web ページの取得を待機する。
time.sleep(3)

# 検索ボックスの要素を取得する。
search_box = driver.find_element_by_name("q")

# 検索ボックスに「ChromeDriver」と入力する。
search_box.send_keys("ChromeDriver")

# 検索をクリックする。
search_box.submit()
time.sleep(5)

driver.quit()

ヘッドレスモードで実行する

デフォルトでは実行ともにブラウザが起動しますが、バックグラウンドで実行することもできます。 WebDriver オブジェクトを作成する際にオプションを渡します。 以下は Yahoo!ニュース からトップページに表示されるニュース一覧を取得する例です。

In [ ]:
import time
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--disable-gpu")

driver = webdriver.Chrome(options=options)

# Yahoo!ニュース にアクセスする。
driver.get("https://news.yahoo.co.jp/")

# Web ページの取得を待機する。
time.sleep(2)

# ニュース一覧を取得する。
topics = driver.find_elements_by_css_selector("#uamods-topics li a")
for topic in topics:
    title = topic.text
    url = topic.get_attribute("href")
    print(title, url)

driver.quit()

FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。 というエラーが出た場合は、先程の環境変数の設定が上手くできていません。パスが合っているかどうかを確認しましょう。