PythonでSeleniumを使ってスクレイピング (基礎)

https://qiita.com/kinpira/items/383b0fbee6bf229ea03d

スクレイピングを勉強しようと思い立って、Selenium を使ってでブラウザを操作してみたので、軽くまとめておこうと思います。

使用したもの

  • Selenium
    • 自動でブラウザを操作する為のライブラリ
  • Chrome
    • ブラウザ

ブラウザに合わせたドライバーを用意する

ブラウザを操作するには、各ブラウザに合わせてドライバーを用意する必要があります。
今回は Chrome を使用するので 公式サイトから ChromeDriver をダウンロードします。

Selenium をインストール

pip で selenium を インストール

pip install selenium

webページを開いてみる

ブラウザを開く
webdriver.Chrome(driver_path)

webページを開く
driver.get(URL)

webページを閉じる
driver.close()

ブラウザを終了 (全てのウィンドウを閉じる)
driver.quit()

from selenium import webdriver
driver = webdriver.Chrome(driver_path)
driver.get(URL)
driver.close()
driver.quit()

要素にアクセスしてみる

HTMLの要素にアクセスする為に id、class、name 等から要素を指定して取得する事ができます。

参考資料

id で取得
driver.find_element_by_id('ID')

class で取得
driver.find_element_by_class_name('CLASS_NAME')

name で取得
driver.find_element_by_name('NAME')

link textで取得
driver.find_elements_by_link_text('LINK_TEXT')

ネストされた要素は path を指定して取得
driver.find_elements_by_xpath(".//a")

アクション

取得した要素に対して、アクションを起こす事でwebページを操作します。

参考資料

ボタンをクリックする
driver.find_element_by_id('Btn').click()

Form に文字を入力する
driver.find_element_by_name('From').send_keys("text")

待機する

よくあるのが、画面のロードが完了する前に、処理が走ってしまいエラーになる。
これに対処する為に必要な要素が準備できるまで、数秒待機する事ができます。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

WebDriverWait(driver, WAIT_SECOND).until(EC.presence_of_element_located((By.CLASS_NAME, 'Btn')))

ブラウザの操作

では上記をふまえて軽く操作してみます。

ボタンをクリックしてみる

例えば、某サイトの購入ボタンを押したい場合

<画面>
スクリーンショット_2016-11-21_13_22_52.png

<ソース>
スクリーンショット_2016-11-21_13_27_44.png

from selenium import webdriver
driver = webdriver.Chrome(driver_path)
driver.get(URL)
driver.find_element_by_class_name('new_addToCart').click()
driver.quit()

こんな感じで find_element_by_class_name() で要素を取得して click() でクリックアクションを起こします。

テキスト入力してみる

検索ボックスに検索キーワードを入力して、検索ボタンを押してみます。

<画面>
スクリーンショット_2016-11-21_13_49_25.png

<ソース>
スクリーンショット_2016-11-21_13_48_53.png

from selenium import webdriver
driver = webdriver.Chrome(driver_path)
driver.get(URL)
driver.find_element_by_id('searchWords').send_keys("search text")
driver.find_element_by_id('searchBtn').click()  

これで検索ボックスに自動で "search text" が入力され検索されます。

まとめ

ボタンを押したり、テキスト入力をしたりの基本動作を覚えると、だいたいの操作が簡単に出来る印象です。
やはり、ブラウザ操作をプログラムで行う事で、並列処理が出来る事の恩恵は大きいですね。
ただ、ブラウザをたくさん立ち上げると PC がめちゃくちゃ重くなるので、そこは気をつけないといけませんね。


+ Recent posts