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

求助:BeautifulSoup无法解析MS Word 365生成的.htm文件怎么办?

问题原因与解决方法

问题原因

  • 编码错误引发转义异常:使用errors='ignore'写入文件时,会忽略编码解析错误,导致HTML核心标签的<、>被错误转义为&lt;、&gt;,直接破坏HTML结构逻辑,让BeautifulSoup无法识别有效标签。
  • Word导出HTML的格式冗余:Word 365生成的stripped类型HTML本身可能带有大量冗余空格、不规范格式标记,叠加错误写入导致的编码损坏,进一步加剧了解析失败。

正确读取与修复方法

  1. 修复转义字符并指定编码读取
    修改解析函数,先修复被转义的HTML字符,再用BeautifulSoup解析:

    from bs4 import BeautifulSoup
    import html
    
    def html_parser(path):
        '''打开HTML文件,修复转义后返回bs4对象'''
        # 指定Word HTML常用编码读取内容
        with open(path, 'r', encoding='utf-8') as inf:
            content = inf.read()
            # 将错误转义的&lt;、&gt;转回<、>
            content = html.unescape(content)
        soup = BeautifulSoup(content, 'html.parser')
        return soup
    
    resource = html_parser('broken.htm')
    print(resource)
    # 修正原代码变量名错误:将template改为resource
    table = resource.findAll('table')[-1]
    print(table)
    
  2. 规范文件写入方式
    后续写入文件时,避免使用errors='ignore',改用errors='replace'处理编码问题,防止关键字符丢失:

    with open('output.htm', 'w', encoding='utf-8', errors='replace') as outf:
        outf.write(content)
    
  3. 优化Word导出设置
    从Word导出HTML时,选择“清理Word特定格式标记”的选项,减少冗余空格和非标准标记,降低解析难度。

内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:02:16