【Selenium】初めてのスクレイピング


スクレイピングに関する注意事項

注意事項は、下記を参考にしました。
事前に読んでおきましょう!

Webスクレイピングの注意事項一覧 - Qiita
Webスクレイピングの法律周りの話をしよう! - Qiita

Seleniumの全体像

下記を参考に見ておきます。

[Selenium] -> [ChromeDriver] -> [Google Chrome]


Components of a Grid :: Documentation for Selenium より引用

環境構築

仮想環境

virtualenv

インストール

pip install selenium

chromeのバージョン確認

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version

バイナリ形式でダウンロード

Downloads - ChromeDriver - WebDriver for Chrome

どこで使うのか

下記のような形で使用することになります。

driver = Chrome('path', options=options)
driver.get('url')

コマンドラインだけでWebブラウザのバージョンを調べる - Qiita

さて実装だ!

スクレイピングするときに考えること

事前に下記の2つを把握しておきます。

  • どのようなアウトプットになるかの確認
  • DOM構造の理解

クローラーの作り方 - Basic 編 - Qiita

詳細

import csv
import pandas as pd
from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.common.by import By


options = ChromeOptions()
options.add_argument('--headless')

print('Connectiong to Remote Browser...')
driver = Chrome('chromedriverがあるパス', options=options)

# 検索結果
driver.get('対象のurl')

# 一覧ページ取得
detail_links = driver.find_elements(By.XPATH,'//div[@class="productImg-wrap"]')
print(len(detail_links))

# 詳細ページリスト化
detail_results = []
for element in detail_links:
    aTag    = element.find_element_by_tag_name("a")
    url     = aTag.get_attribute("href")
    detail_results.append(url)

# 空のDataFrameを用意
cols = ['brand_name', 'url']
df = pd.DataFrame(index=[], columns=cols)

# 結果をリスト化
final_results = []
for url in detail_results:
    driver.get(url)
    article_links = driver.find_elements(By.XPATH,'//div[@class="attributes-list"]')
    print(article_links)

    # データフレームを作成
    record = pd.Series([article_links[0].text, url], index=df.columns)
    df = df.append(record, ignore_index=True)
    df.to_csv("output.csv")

# ブラウザを終了
driver.quit()

driver.find_elements(By.XPATH,'//div[@class="attributes-list"]')
これが、class名で、要素を取得する実装になります。

PythonでSeleniumを使ってスクレイピング (基礎) - Qiita
Selenium API(逆引き)
2. Getting Started — Selenium Python Bindings 2 documentation

Chain

その他の実装は下記から確認することができます。
7. WebDriver API — Selenium Python Bindings 2 documentation

その他参考記事

Python + Selenium で Chrome の自動操作を一通り - Qiita
ChromeとPythonのchromedriver-binaryのバージョンを合わせたい。 - Qiita

次は?

E2Eテストで使えるようにしていきたいですね。