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

如何用BeautifulSoup解析嵌套HTML内容的XML文件?

解决嵌套HTML的XML解析问题

我明白你遇到的麻烦了——当你用BeautifulSoup解析包含嵌套HTML的XML时,外层的XML结构会让<description>标签里的<body>被当成纯文本,而不是可识别的HTML节点,所以调用find_all('body')才拿不到内容。

问题根源

你一开始用html.parser解析整个XML文件,这会让BeautifulSoup把文档当作HTML处理,XML里的嵌套HTML标签会被当作普通文本节点,无法被后续的find方法识别。而且外层XML结构需要用专门的XML解析器处理,才能正确区分各个XML标签。

解决方案:分两步解析

我们可以先解析外层的XML结构,提取出每个<description>内部的HTML字符串,再单独解析这段HTML,就能正常获取<body>里的内容了。修改后的代码如下:

from bs4 import BeautifulSoup

# 第一步:用XML解析器处理整个XML文件,正确识别外层的<description>标签
soup = BeautifulSoup(myfile, 'xml')
desc_content_list = soup.find_all('description')

for desc in desc_content_list:
    # 提取<description>内部的原始HTML内容(保留完整标签结构)
    inner_html_content = str(desc.contents[0])
    # 第二步:用HTML解析器单独解析这段嵌套的HTML
    inner_soup = BeautifulSoup(inner_html_content, 'html.parser')
    # 现在就能正常找到<body>标签了
    body_tag = inner_soup.find('body')
    if body_tag:
        # 打印<body>内的文本内容,也可以直接print(body_tag)查看完整结构
        print(body_tag.get_text(strip=True))

额外说明

  • 不需要保存文件再解析:直接在内存中提取字符串并重新解析即可,更高效简洁。
  • 检查XML格式:你提供的示例里有个<description标签未闭合,实际运行时要确保所有XML标签都正确闭合,否则解析会出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:56