网页爬取生成DataFrame行数异常过多问题求助
问题排查与修正
问题根源
你的代码逻辑犯了两个关键错误:
- 嵌套循环顺序颠倒:先循环列索引再循环行,导致生成的字典数量是列数×行数(60×9=540个,加上网页可能存在的额外行就是580+)
- 每次仅添加单个列的键值对:每个字典只包含一列数据,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
相关产品推荐
相关产品推荐

