Pythonのブラウザ操作でテーブル内の情報を読み取る方法を紹介します。
実装方法
下記処理を行うことでテーブルの情報を読み取れます。
- 指定したURLでブラウザを開く
- テーブル要素を取得
- 1列ずつ順番にtd要素をまとめて取得
- td要素のテキストを取得
下記コードではテーブルをCSSセレクタで取得していますが、テーブルが複数ある場合などはIDやClassを指定することで特定のテーブルのみ取得可能です。
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def read_table(url):
# Chrome ドライバを起動
driver = uc.Chrome()
try:
# 指定された URL を開く
driver.get(url)
# テーブルが表示されるまで待機
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "table"))
)
# データを格納するリスト
datalist= []
while true:
# テーブルを取得
table = driver.find_element(By.CSS_SELECTOR, "table")
rows = table.find_elements(By.CSS_SELECTOR, "tr")
# 各行からデータを取得
for row in rows[1:]: # ヘッダー行をスキップ
cols = row.find_elements(By.CSS_SELECTOR, "td")
if len(cols) < 4:
continue # 列数が足りない場合はスキップ
# 各列のデータを取得
data= {
"col0": cols[0].text,
"col1": cols[1].text,
"col2": cols[2].text,
"c0l3": cols[3].text,
}
datalist.append(data)
if # 任意の条件でループを抜ける
break
return datalist
finally:
# ブラウザを閉じる
driver.quit()