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

如何使用Python lxml与XPath批量递归清理本地HTML文件内容

基于lxml的HTM文件批量清理实现方案

注意:测试时建议先备份原文件,或者修改写入路径避免直接覆盖原文件导致内容丢失

完整可运行代码

#!/usr/bin/python
import os
import lxml.html as lh

# 替换为你要处理的目录路径
path = '/path/to/directory'
# 整理所有待删除元素的XPath规则
remove_xpaths = [
    # 删除ID为box、columnRight、adbox、footer的div
    '//div[@id="box" or @id="columnRight" or @id="adbox" or @id="footer"]',
    # 删除class为box的div(精确匹配)
    '//div[@class="box"]',
    # 如需模糊匹配class包含box的div,可替换使用下方规则:
    # '//div[contains(concat(" ", normalize-space(@class), " "), " box ")]',
    # 删除所有样式表(内嵌style+外链css)
    '//style',
    '//link[@rel="stylesheet"]',
    # 删除所有脚本标签
    '//script'
]

for root, dirs, files in os.walk(path):
    for name in files:
        if name.endswith(".htm"):
            # 拼接生成文件的绝对路径
            file_path = os.path.join(root, name)
            # 解析HTML构建DOM树
            doc = lh.parse(file_path)
            # 按规则批量删除元素
            for xpath in remove_xpaths:
                for element in doc.xpath(xpath):
                    # 规避元素已被删除导致的父节点不存在报错
                    parent_node = element.getparent()
                    if parent_node is not None:
                        parent_node.remove(element)
            # 将修改后的DOM写回原文件
            doc.write(file_path, encoding='utf-8', pretty_print=True, method="html")

核心调整说明

  • 补全了文件路径拼接逻辑,使用os.path.join(root, name)生成每个htm文件的完整路径,解决遍历多级子目录时的路径错误问题
  • 统一整理所有待删除元素的XPath规则,后续需要新增删除规则只要在remove_xpaths列表中追加即可,维护更方便
  • 增加父节点存在性校验,避免前置规则已经删除当前元素的父节点时程序抛出异常
  • 输出时指定encoding='utf-8'避免中文乱码,pretty_print=True会自动格式化HTML结构,不需要可以删除该参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:18:03