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

网页爬取生成DataFrame行数异常过多问题求助

问题排查与修正

问题根源

你的代码逻辑犯了两个关键错误:

  1. 嵌套循环顺序颠倒:先循环列索引再循环行,导致生成的字典数量是列数×行数(60×9=540个,加上网页可能存在的额外行就是580+)
  2. 每次仅添加单个列的键值对:每个字典只包含一列数据,pandas拼接这些零散字典时会自动填充NaN,最终形成几百行的DataFrame

修正方案

应该先遍历每一行,对每一行一次性收集所有列的数值,生成包含完整60个键值对的行字典,再加入列表。这样列表长度等于实际行数(9行),生成的DataFrame就是预期的60列×9行。

修正后的代码:

value_list = []
header_list = ['h1','h2','h3',.......,'h60']

# 遍历每一行数据
for row in table_trs:
    # 获取当前行的所有td元素(避免重复查找提升效率)
    tds = row.find_elements(By.TAG_NAME, "td")
    # 校验列数匹配,防止索引越界
    if len(tds) != len(header_list):
        continue  # 也可根据需求抛出异常提示
    # 生成当前行的完整数据字典
    row_data = {header_list[i]: tds[i].text for i in range(len(header_list))}
    value_list.append(row_data)

df = pd.DataFrame(value_list)

额外注意事项

  • 确认table_trs仅包含表格的数据行,不要包含表头对应的<tr>标签,否则会多一行无效数据
  • 加入列数校验可以避免网页结构异常导致的索引错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:25:02