2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python で Webスクレイピングする

Last updated at Posted at 2021-08-27

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 のバージョンが一致しない問題で動かなかったので、

  1. Chrome のバージョンチェック > 92.0.4515.159
  2. Chrome Driver のサイト で Chrome と近いバージョンのものをダウンロード > ChromeDriver 92.0.4515.107
  3. 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 属性で検索。
    image.png
コード 機能
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. 要素の取得の仕方

  1. Chrome の場合、Ctrl + Shift + I
  2. 検証コンソール左上の選択矢印クリック
    image.png
  3. 知りたい要素クリック
    image.png

参考にさせて頂いたサイト

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?