如何用read_html提取指定网页表格及筛选后数据?
问题解决方案
1. 指定class提取表格失败的原因及修复
- 类名匹配问题:
pd.read_html的attrs参数要求完全匹配属性值,若网页中表格的class存在动态生成的部分、类名顺序不一致,或你输入的类名与源码中不完全一致,就会匹配失败。 - 修复方法:
- 打开网页源码(F12),定位目标表格,确认实际class属性,仅保留核心类名缩小匹配范围,比如:
tables = pd.read_html(url, attrs={'class': 'tbl-type-1'}) - 若表格是JS动态渲染的,
pd.read_html无法抓取,需改用selenium模拟浏览器加载后再提取。
- 打开网页源码(F12),定位目标表格,确认实际class属性,仅保留核心类名缩小匹配范围,比如:
2. 提取Reported date筛选后的数据
- 静态数据筛选:如果页面加载时已包含所有数据,先抓取表格再用pandas过滤:
import pandas as pd url = "https://spib.wooribank.com/pib/Dream?withyou=ENENG0358" tables = pd.read_html(url)[1:4] # 假设第一个表格为目标表,筛选指定日期 filtered_df = tables[0][tables[0]['Reported date'] == '目标日期'] - 动态数据处理:若筛选需触发JS接口请求,有两种方式:
- 用
selenium模拟操作:打开浏览器,定位日期筛选控件输入目标日期,点击筛选后提取页面表格。 - 抓API接口:通过浏览器F12网络面板,找到筛选时发送的请求,直接请求接口获取JSON数据并转为DataFrame。
- 用
3. 辅助调试技巧
- 打印所有表格的结构,确认目标表位置:
for idx, table in enumerate(pd.read_html(url)[1:4]): print(f"表格{idx+1}列名:{table.columns.tolist()}") print(table.head()) - 用
match参数通过关键词匹配目标表格:target_table = pd.read_html(url, match='Reported date')[0]
内容的提问来源于stack exchange,提问作者hoa tran
相关产品推荐
相关产品推荐

