初心者SEのつぶやき

初心者SEのつぶやき

Pythonを用いたWebスクレイピングの方法

やりたいこと

Pythonで動的に生成されているサイトをスクレイピングしたい。
(Pythonのバージョンは3.11.7を利用している)

方法

seleniumとwebdriver-managerを利用する。

インストール

  • 下記コマンドでseleniumをインストールする。
 pip install selenium
  • 下記コマンドでwebdriver-managerをインストールする。
pip install webdriver-manager

実装例

  • 必要なライブラリをimport
  # import libraries
  import os
  from selenium import webdriver
  from selenium.webdriver.chrome.service import Service
  from selenium.webdriver.common.by import By
  from webdriver_manager.chrome import ChromeDriverManager
  from selenium.webdriver.support.ui import WebDriverWait
  from selenium.webdriver.support import expected_conditions as EC
  driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
  • ページをロード
  driver.get(対象のURL)
  # ロード待ちを10秒に指定
  driver.implicitly_wait(10)
  driver.quit()

要素の取得&利用法(一部)

  • クラス名指定で要素取得
  # find_elementsメソッドで、input-formクラス要素を全て取得
  class_contents = driver.find_elements(By.CLASS_NAME, "input-form")
  
  #find_elementメソッドで、custom-buttonクラスのうち初めの一つ取得
  button = driver.find_element(By.CLASS_NAME, "custom-button")
  • XATH指定で要素を取得
listbox = self.driver.find_element(By.XPATH, '//ul[@role="listbox"]')
  • タグ名指定で要素を取得
# liタグを取得
list_items = listbox.find_element(By.TAG_NAME, 'li')
  • ID名指定で要素を取得
tab_content = self.driver.find_element(By.ID, "abc")
  • input要素を入力
input_content.clear()
input_content.send_keys(入力したい内容)
  • ボタン押下処理
wait = WebDriverWait(driver, 10)
button.click()
wait.until(EC.staleness_of(button))
  • スクショを撮る
  driver.save_screenshot(保存先)

感想

スクレイピングはできるようになったが、やはり実行時間が長いので
高速化手段がないか検討したい&将来バッチ実行をさせてみたい。

今回の内容が参考になったら幸いです。