482
533

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 5 years have passed since last update.

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

Last updated at Posted at 2016-11-21

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

#使用したもの

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

#ブラウザに合わせたドライバーを用意する
ブラウザを操作するには、各ブラウザに合わせてドライバーを用意する必要があります。
今回は Chrome を使用するので [公式サイト] (http://www.seleniumhq.org/projects/webdriver/)から 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 がめちゃくちゃ重くなるので、そこは気をつけないといけませんね。

482
533
1

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
482
533

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?