You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Pandas.read_html()处理Selenium获取的HTML表格字符串?

解析转义HTML表格字符串到Pandas DataFrame

没问题,我之前也碰到过这种受JS限制只能通过Selenium抓取innerHTML的场景,解决起来其实很直接——核心是先把转义的HTML字符串还原成原始格式,再交给pd.read_html()处理,具体步骤如下:

步骤1:还原转义的HTML字符串

你通过get_attribute('innerHTML')拿到的字符串,大概率包含HTML实体转义(比如用&lt;替代<&gt;替代>),直接丢给read_html会导致解析失败。我们可以用Python内置的html模块来还原原始HTML结构:

import html
import pandas as pd

# 假设这是你从Selenium获取到的转义字符串
escaped_html = stuff  # 对应你代码里的stuff变量

# 还原转义的HTML内容
raw_html = html.unescape(escaped_html)

步骤2:用Pandas解析处理后的HTML字符串

read_html()本身支持直接传入HTML字符串,它会自动识别内容中的所有表格,返回一个DataFrame的列表。你只需要根据实际情况取出目标表格即可:

# 解析HTML字符串,得到所有表格对应的DataFrame列表
dfs = pd.read_html(raw_html)

# 假设目标表格是列表中的第一个,取出并使用
target_df = dfs[0]

# 查看解析结果
print(target_df.head())

额外优化:应对复杂表格场景

如果页面存在多个表格,或者表格结构特殊(比如有合并单元格、自定义表头),可以通过read_html的参数精准匹配:

  • match参数:指定表格内的关键词,只解析包含该关键词的表格,例如pd.read_html(raw_html, match="2024年统计数据")
  • header参数:指定表头所在的行索引,比如表格表头在第2行就传入header=1
  • attrs参数:通过HTML属性定位表格,比如指定表格的idclass,例如pd.read_html(raw_html, attrs={"id": "target-stat-table"})

这样处理后,就能顺利把你抓取到的转义HTML表格转换成可用的Pandas DataFrame了。

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

火山引擎 最新活动