初めに

スクレイピングとは「Webサイトから特定の情報を収集する」ことです。
機械学習を行うにあたってデータ収集する際に行われたりします。
そして、pythonでのスクレイピングにてよく用いられるライブラリに「selenium」というものがあります。
本記事では、seleniumを使うにあたって、最低限知っておいた方が良さそうな事を記載します。

selenium導入

本記事では「chromeブラウザ」を用いたスクレイピングについて説明します。
それを前提として、スクレイピングをpythonで行うにあたり、下記の通り、ライブラリ等を準備します。

  1. chromeブラウザをPCにインストール
  2. seleniumライブラリをインストール
    • pip install selenium
  3. chrome用のwebドライバを下記URLよりダウンロード
    • https://chromedriver.storage.googleapis.com/index.html
    • ※アクセスするとバージョン毎のフォルダ一覧が表示されます
      (chromeのバージョンと合わないとselenium利用時にエラーが出るので一概には言えませんが、)どれをダウンロードすればいいか分からない場合は下記をダウンロード。(最新リリース版)
      1. LATEST_RELEASE」をクリック
      2. 表示されたバージョンのフォルダを開く
      3. PCのOSに合ったzipファイルをダウンロード
        winの場合は「chromedriver_win32.zip」

[python] ドライバを起動

下記を実行すると、chromeブラウザが立ち上がり、最後に定義したインスタンス「driver」を操作することで、ブラウザの操作やサイト内の情報を取得することができます。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

#============================================
# selenium起動
#============================================
#---------------------------------
# webドライバのパス
#---------------------------------
# 相対パス
driver_path = "chromedriver.exe"

#---------------------------------
# option の設定
#---------------------------------
options = Options()
# options.add_argument("--headless") #chromeブラウザ非表示

driver = webdriver.Chrome(
    executable_path=driver_path,
    options=options
)

もし、下記のようなエラーが表示された場合は、「chromeとwebドライバのバージョンが合わないこと」を意味するので、「Chromeのバージョンを上げる」や「別バージョンのwebドライバをダウンロードして使用する」等でバージョンを合わせればエラー解消できます。

SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 109
Current browser version is 108.0.5359.125 with binary path C:\xxx\chrome.exe

[python] サイトへアクセス

下記でサイトにアクセスできます。

# サイトへアクセス
url = "http://google.com"
driver.get(url)

[python] サイト内の要素を取得

サイト内の要素を取得する際には、その要素の位置を調べ、その位置を示すコードをプログラムに入力する必要があります。
要素の位置はchromeブラウザの機能を用いることで簡単に調べられます。
要素の位置を示す方法として「xpath」と「cssセレクタ」というものがあり、その情報をchromeブラウザの機能で簡単に調べられます。
※本説明では、(所感として比較的よく使われている)「xpath」を用います。

[chrome] 要素の位置の確認方法(xpath)

  1. 対象サイト内にカーソルを置き、右クリックし「検証」をクリック
    →ブラウザの右側に、DevToolsが表示される。
  2. ブラウザの右側に表示されたDevToolsの左上にある下図赤枠をクリック
  3. 取得したい要素にカーソルを合わせてクリック
    →DevTools(のElements)内のソースにて、対象要素の個所がグレーになる。
  4. グレーになった箇所にカーソルを合わせ、右クリックし、「Copy」 -> 「Copy XPath」をクリック
    →対象要素のxpathがクリックボードにコピーされる
2. DevToolの左上にある上図赤枠をクリック
3. 取得したい要素にカーソルを合わせてクリック
3. DevTools(のElements)内のソースにて、対象要素の個所がグレーになる。

[python] 要素取得(+要素内の属性valueを出力)

下記の通り、「find_element」で指定xpathの要素が取得でき、「get_attribute」で対象要素の属性等が取得できる。

# 要素を取得(inputタグ)
xpath = "/html/body/div[1]/div[3]/form/div[1]/div[1]/div[4]/center/input[1]"
elem = driver.find_element(
    By.XPATH,
    xpath,
)
# inputタグの属性valueを出力
value = elem.get_attribute("value")
print(value)
[出力結果]
Google 検索

[python] ドライバをクローズ

スクレイピングを終えたら、下記でドライバをクローズしましょう。
実行すると立ち上がっていたブラウザが閉じられます。

# ドライバをクローズする
driver.close()

By clear

データエンジニア・機械学習・分析等を主とし、Webアプリ開発も行っているフリーランスです。