Edited at

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

スクレイピングを勉強しようと思い立って、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 がめちゃくちゃ重くなるので、そこは気をつけないといけませんね。