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

使用Selenium爬取表格写入Pandas DataFrame报TypeError如何解决

问题解决:Selenium爬取表格转Pandas DataFrame TypeError修复

错误原因

你遇到的TypeError核心来自两个逻辑错误:

  • 你用.text获取的headers和rows都是整段连续字符串,不是按列/按行拆分的列表结构。Pandas构造DataFrame时要求columns参数传入和数据列数匹配的列表,单个字符串无法作为多列表头,同时未拆分的行数据也无法匹配列数要求
  • 你直接提取整个tbody的文本,没有按行、按列拆分数据,格式完全不符合Pandas的输入规范

修复后的完整代码

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

# 初始化驱动,路径前加r防止Windows路径转义,新版本Selenium可省略路径自动匹配chromedriver
driver = webdriver.Chrome(r'C:\Program Files (x86)\chromedriver.exe')
driver.get("https://www.fami-qs.org/certified-companies-6-0.html")

# 切换到表格所在iframe
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[title='Inline Frame Example']")))

# 获取表头:逐个提取th元素文本,生成表头列表
header_elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//table[@id='sites']//thead//th")))
headers = [h.text.strip() for h in header_elements]

# 获取行数据:先提取所有行元素,再逐行提取单元格文本,生成二维数据列表
row_elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//table[@id='sites']//tbody//tr")))
table_data = []
for tr in row_elements:
    td_elements = tr.find_elements(By.TAG_NAME, "td")
    row_data = [td.text.strip() for td in td_elements]
    table_data.append(row_data)

# 构造DataFrame
df = pd.DataFrame(table_data, columns=headers)
print(df)

# 任务完成后关闭驱动释放资源
driver.quit()

补充注意事项

  • 如果需要爬取多页数据,可在翻页操作完成后重复行数据获取逻辑,将新数据追加到table_data列表后再统一构造DataFrame
  • 若出现元素加载超时,可适当延长WebDriverWait的等待时长,或增加页面滚动逻辑确保表格元素完全渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:15:08