やりたいこと
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(保存先)
感想
スクレイピングはできるようになったが、やはり実行時間が長いので
高速化手段がないか検討したい&将来バッチ実行をさせてみたい。
今回の内容が参考になったら幸いです。