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

使用pd.read_html()解析HTML表格时能否保留单元格内HTML元素?

问题:pd.read_html()能否保留HTML单元格内的完整HTML元素?

给定如下HTML表格:

<table>
 <thead>
   <th> X1 </th>
   <th> X2 </th>
</thead>
<tbody>
   <tr>
    <td>Test</td>
    <td><span style="..."> Test2 </span> </td>
  </tr>
</tbody>
</table>

使用pd.read_html()将其解析为DataFrame时,X2列的单元格仅保留文本“Test2”,但需求是完整保留单元格内的HTML元素(即<span style="..."> Test2 </span>)。目前未在pd.read_html()的官方文档中找到对应解决方案,仅想到手动解析的替代方案,询问是否可通过pd.read_html()直接实现该需求。


回答

pd.read_html()本身无法直接实现保留单元格内的HTML元素,因为它的核心设计目标是提取表格的文本内容,默认会自动剥离所有HTML标签,只保留纯文本。

如果不想完全从零开始手动解析,可以用BeautifulSoup做预处理,提取每个<td>标签内的原始HTML内容,再构造DataFrame,示例代码如下:

import pandas as pd
from bs4 import BeautifulSoup

# 原始HTML内容
html = """
<table>
 <thead>
   <th> X1 </th>
   <th> X2 </th>
</thead>
<tbody>
   <tr>
    <td>Test</td>
    <td><span style="..."> Test2 </span> </td>
  </tr>
</tbody>
</table>
"""

# 解析HTML
soup = BeautifulSoup(html, "html.parser")
target_table = soup.find("table")

# 提取表头
headers = [th.get_text(strip=True) for th in target_table.find_all("th")]

# 提取每行数据,保留td内的完整HTML
data_rows = []
for row in target_table.find_all("tr")[1:]:  # 跳过表头行
    cells = [td.decode_contents() for td in row.find_all("td")]
    data_rows.append(cells)

# 生成DataFrame
df = pd.DataFrame(data_rows, columns=headers)
print(df)

运行后,X2列的单元格会完整保留<span style="..."> Test2 </span>的HTML内容,既满足需求,又能借助pandas快速完成DataFrame的构造。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:25:26