You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium获取表格元素文本问题:如何提取tbody/tr/td中的文本?

解决Selenium爬取表格文本的问题

问题根源

你用find_elements()系列方法获取到的是WebElement对象的列表,直接把列表赋值给字典字段自然会得到列表或空值;而列表本身没有.text属性,直接调用就会报错。必须遍历列表中的每个WebElement,单独提取文本。

具体解决方案

1. 确保元素加载完成(避免空列表)

用Selenium的显式等待替代硬编码等待,确保表格行完全加载后再定位,防止因页面未渲染完成导致获取到空列表:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.XPATH, "//tbody/tr")))

2. 遍历行与单元格提取文本

定位表格的所有行后,逐行遍历,再定位每行的单元格,逐个提取.text内容:

# 定位所有表格行
rows = driver.find_elements(By.XPATH, "//tbody/tr")

currency_data = []
for row in rows:
    # 定位当前行的所有单元格
    cells = row.find_elements(By.TAG_NAME, "td")
    # 校验单元格数量,避免索引越界
    if len(cells) >= 3:
        iso_code = cells[0].text.strip()
        country = cells[1].text.strip()
        currency = cells[2].text.strip()
        currency_data.append({
            "iso": iso_code,
            "country": country,
            "currency": currency
        })

3. 转换为Pandas DataFrame

直接将整理好的字典列表传入pd.DataFrame()即可:

import pandas as pd

df = pd.DataFrame(currency_data)
print(df.head())

完整可运行代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd

# 初始化浏览器
driver = webdriver.Chrome()
driver.get("https://www.worlddata.info/currencies/")

# 等待表格加载
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.XPATH, "//tbody/tr")))

# 提取表格数据
rows = driver.find_elements(By.XPATH, "//tbody/tr")
currency_data = []

for row in rows:
    cells = row.find_elements(By.TAG_NAME, "td")
    if len(cells) >= 3:
        currency_data.append({
            "iso": cells[0].text.strip(),
            "country": cells[1].text.strip(),
            "currency": cells[2].text.strip()
        })

# 转为DataFrame并输出
df = pd.DataFrame(currency_data)
print(df.head())

# 关闭浏览器
driver.quit()

关键注意事项

  • 永远不要直接对find_elements()返回的列表调用.text,必须遍历每个元素单独提取
  • 显式等待能有效避免因页面加载延迟导致的空列表问题
  • 用.strip()清理文本中的空格、换行符,保证数据整洁
  • 增加单元格数量校验,防止网页结构变动引发索引越界错误

内容的提问来源于stack exchange,提问作者urdearboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:53:24