pandas调用read_html解析HTML表格无法提取全部行的问题求助
问题排查与解决方案
1. 行数缺失的核心原因
read_html默认自动识别表头:默认会把HTML表格的第一行识别为DataFrame的列名,不计入数据行。你7行的原始表格,第一行被转为列名后,数据行自然只剩6行,和你不用head()得到6行的现象完全吻合。head()默认只返回前5行:df.head()不带参数时默认仅返回前5条数据,并非删除了最后一行,需要查看更多行时可以传入指定行数,比如df.head(10)查看前10行,直接打印df默认会显示全部行(行数特别多的情况除外)。- 隐藏行未被解析:如果HTML中存在CSS设置为隐藏的表格行,
read_html默认只会解析可见行,也会导致行数缺失。 - 解析器兼容问题:如果HTML表格语法不规范、存在合并单元格,不同解析器的解析结果会有差异,可以切换解析器参数尝试。
2. 你操作上的错误点
你采用df[2][3]的取值方式存在风险:pandas中方括号默认优先取列,df[2]是先取索引为2的列,再取该列的索引为3的行,很容易搞混行列顺序,也可能因为列名类型不匹配触发报错。
3. 修复后的代码示例
r = get(f"site-censured").text # header=None 关闭自动表头识别,所有行都作为数据行;displayed_only=False 同时解析隐藏行;可按需切换flavor解析器为lxml/html5lib df = read_html(r, header=None, displayed_only=False, flavor='html5lib')[0] # 打印总行数验证是否符合预期 print(f"表格总行数:{len(df)}") # 正确的按位置取值方式:iloc[行索引, 列索引],索引从0开始计数 target_value = df.iloc[2, 3]
内容的提问来源于stack exchange,提问作者Alberto Vona
相关产品推荐
相关产品推荐

