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

使用BeautifulSoup处理XML丢失大量代码,如何解决?

问题根源与解决方案

核心问题:解析器选型错误

你用的html.parser是Python内置的HTML解析器,专为标准HTML设计,但维基百科文章内容是MediaWiki自定义的类XML标记(非严格标准HTML/XML)。这个解析器会自动"修正"它判定为不规范的标记结构——比如自动闭合未闭合标签、丢弃不符合HTML规则的嵌套内容、直接删除识别不了的特殊标签,这就是大量代码丢失的直接原因。

其他潜在问题

  • 正则re.sub的局限:正则无法正确处理嵌套的<ref>标签(比如<ref><ref>...</ref></ref>),还会被转义字符(如&lt;ref&gt;)干扰,导致替换不彻底或误替换。
  • str(soup)的格式化问题:HTML解析器转字符串时会重新排版内容,比如删除多余空格、调整标签结构,进一步破坏原内容完整性。

修复方案

  1. 更换为XML解析器
    安装lxml库(对XML支持更完善),使用'lxml-xml'作为解析器,避免HTML解析器的自动修正逻辑:

    from bs4 import BeautifulSoup
    
    # 用XML解析器加载内容,保留原始结构
    soup = BeautifulSoup(proc_string, 'lxml-xml')
    
    # 替换所有ref标签
    for ref_tag in soup.find_all('ref'):
        ref_tag.replace_with('[XXR]')
    
    output_string = str(soup)
    

    若不想额外安装库,也可尝试内置的'xml'解析器,但兼容性不如lxml。

  2. 保留原始标记细节
    若要完全保留原内容格式,避免解析器的任何修改,可使用XML解析器的prettify()方法输出,或遍历节点时更谨慎地处理文本内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:50:01