Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

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

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

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

Seleniumの全体像

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

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

image.png
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テストで使えるようにしていきたいですね。

sanoyo
自衛隊からソフトウェアエンジニア
https://note.com/yokosano
engineerlife
技術力をベースに人生を謳歌する人たちのコミュニティです。
https://community.camp-fire.jp/projects/view/280040
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away