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

使用pandas.read_html时如何处理td标签内嵌套多个p标签的问题

结论

pandas的read_html()没有内置参数支持直接为<td>内嵌套的多个<p>标签内容添加分隔符,它底层调用的文本提取逻辑会直接拼接所有子节点的文本内容,默认不会插入分隔符。

可行解决方案

方案1:预处理HTML源码后传入read_html(改动最小)

先将页面源码中<p>标签的相邻边界替换为你需要的分隔符(空格、特殊标识均可),再把处理后的源码传给read_html()即可,示例代码如下:

import re
import requests
import pandas as pd

# 获取原始页面源码
raw_html = requests.get("目标页面URL").text
# 正则替换所有p标签相邻边界为空格,自动忽略标签之间的空白字符
processed_html = re.sub(r'</p>\s*<p>', ' ', raw_html)
# 传入处理后的源码解析表格
df_list = pd.read_html(processed_html)

如果需要后续拆分文本,可以替换为||之类不会和正文内容冲突的特殊分隔符,后续再用str.split()拆分即可。

方案2:自定义解析表格(灵活性最高)

如果表格嵌套结构复杂,预处理容易误改其他内容,可以自行用BeautifulSoup遍历解析表格,完全控制单元格内容的拼接逻辑:

from bs4 import BeautifulSoup
import requests
import pandas as pd

soup = BeautifulSoup(requests.get("目标页面URL").text, "lxml")
# 定位目标表格,可根据id、class等属性筛选
target_table = soup.find("table", attrs={"id": "你要的表格id"})
table_data = []

for tr in target_table.find_all("tr"):
    row_data = []
    for cell in tr.find_all(["th", "td"]):
        # 提取所有p标签文本后用空格拼接
        p_content = [p.get_text(strip=True) for p in cell.find_all("p")]
        cell_content = " ".join(p_content) if p_content else cell.get_text(strip=True)
        row_data.append(cell_content)
    table_data.append(row_data)

# 转换为DataFrame,若第一行是表头可调整columns参数
df = pd.DataFrame(table_data[1:], columns=table_data[0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:36:06