Selenium を使ってPython で WEBスクレイピングしてみる
1. 環境
内容 | バージョン |
---|---|
OS | Windows 10 Pro (64bit) |
Chrome | 92.0.4515.159 |
ChromeDriver | 92.0.4515.107 |
Python | 3.9.0 |
selenium | 3.141.0 |
- Visual Studio Code
アイテム | バージョン |
---|---|
バージョン | 1.59.1 (user setup) |
コミット | 3866c3553be8b268c8a7f8c0482c0c0177aa8bfa |
日付 | 2021-08-19T11:56:46.957Z |
Electron | 13.1.7 |
Chrome | 91.0.4472.124 |
Node.js | 14.16.0 |
V8 | 9.1.269.36-electron.0 |
OS | Windows_NT x64 10.0.19042 |
Python | 3.9.0 64bit |
2. 初期設定
Seleniumは、PythonのコードからWEBブラウザを操作する。
操作するためには、WebDriverが必要。
2-1. インストール
2-1-1. Selenium インストール
pip install selenium
2-1-2. ChromeDriver のインストール
一度、以下のコマンドでインストールしましたが、
pip install chromedriver-binary
Chrome と Chromedriver のバージョンが一致しない問題で動かなかったので、
- Chrome のバージョンチェック > 92.0.4515.159
- Chrome Driver のサイト で Chrome と近いバージョンのものをダウンロード > ChromeDriver 92.0.4515.107
- Zip を解凍、中身の chromedriver.exe をプログラムのあるディレクトリに置いてダブルクリック。
以上でバージョンを揃えて動かすことが可能に。
以下参考サイト。
3. サンプルコードから内容について確認
sample.py
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
#Chromeを操作
driver = webdriver.Chrome()
driver.get('https://www.google.com/')
time.sleep(5)
search_box = driver.find_element_by_name("q")
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5)
driver.quit()
以下、内容について。
from selenium.webdriver.common.keys import Keys
- Keys クラスで、RETURN、F1、ALTなどのキーボードのキーを提供
driver = webdriver.Chrome()
- Chrome WebDriver のインスタンスを作成。
Chrome が立ち上がる。
driver.get('https://www.google.com/')
-
driver.get メソッドは、URLによって指定されたページに移動。
WebDriverは、テストまたはスクリプトが実行する前に、ページが完全にロードされる(つまり、「onload」イベントが発生する)まで待機。
※ページがロード時にたくさんのAJAXを使用すると、WebDriverは完全にロードされたかどうかわからないということに注意する必要あり。
search_box = driver.find_element_by_name("q")
- WebDriverでは、find_element_by_* メソッドのひとつを使って要素を見つけることができる。
今回の入力テキスト要素は、find_element_by_name メソッドを使用して name 属性で検索。
コード | 機能 |
---|---|
by_id(id) | id属性がidである要素 |
by_class_name(name) | クラス名がnameの要素 |
by_name(name) | タグ内のname属性が一致する要素 |
by_tag_name(name) | タグ名が一致する要素 |
by_link_text(text) | テキストに完全一致する要素 |
by_partial_link_text(text) | テキストに部分一致する要素 |
by_xpath(path) | xpathが一致する要素 |
search_box.send_keys('ChromeDriver')
- キーを送信。これはキーボードを使用してキーを入力するのと同じ。
特殊キーは、 selenium.webdriver.common.keys からインポートした Keys クラスを使用して送信。
安全のため、あらかじめ入力フィールド(例:「検索」)に入力したテキストをクリアする。
そうすれば、検索結果には影響を及ぼさない。
今回で言えば、ChromeDriver という文字列でGoogle検索開始。
search_box.submit()
なくても動きました。
よくわかりませんでしたが、フォームを送信するときに利用する?
→ これがないと、記入内容を送信してくれないとのことでした。
たまたま動いただけだったようです。(2021/09/04追記)
driver.quit()
すべてのウィンドウを閉じる。
4. 要素の取得の仕方
参考にさせて頂いたサイト