如何批量将HTML文件转换为TXT

作者:技术拾光

时间:2026-06-18

浏览:79

实战中,直接命令行一把梭是最快的。比如在Linux或macOS下,一个简单的循环就能批量处理所有HTML文件,不用开软件也不用写脚本,而且默认行为就适合大多数网页文本提取场景。 为什么别用浏览器“另存为文本”或正则删标签 先聊聊那些看似省事、实则坑人的做法。浏览器右键“另存为文本”,丢掉的远不止格式

文章目录

实战中,直接命令行一把梭是最快的。比如在Linux或macOS下,一个简单的循环就能批量处理所有HTML文件,不用开软件也不用写脚本,而且默认行为就适合大多数网页文本提取场景。

为什么别用浏览器“另存为文本”或正则删标签

先聊聊那些看似省事、实则坑人的做法。浏览器右键“另存为文本”,丢掉的远不止格式——语义结构没了,标题变成了普通段落,中文乱码成了家常便饭,换行乱得没法看。直接在控制台敲document.body.innerText看起来快,但对动态渲染的内容完全不可靠,而且它可不会贴心地帮你过滤广告、导航栏、脚注这些干扰块。

更危险的是用正则表达式去匹配并删除标签。HTML允许属性值里包含>、注释里带着-->,CDATA段里什么花样都有——正则表达式要么漏删,要么误删,没有第三条路。以下是常见的翻车现场:

  • 转换后整页内容粘成了一行,阅读得靠手指横向滚屏
  • 中文变成了乱码或空格
  • 链接变成了[1],但正文里找不到对应的地址
  • 表格内容全挤在一行里,根本无法阅读

html2text 批量转换的实操要点

回到我们的主角。html2text是专门为HTML转纯文本设计的命令行工具,不依赖浏览器,也不关心你用了什么CSS,但它能识别语义块——比如

、
    、
    这些标签,并转化为可读的纯文本格式。装好后,一个简单的命令就能搞定批量转换:

    for f in *.html; do html2text -utf8 "$f" > "${f%.html}.txt"; done

    几个关键参数值得记下来:

    • -utf8:强制按UTF-8解码,避免中文乱码,尤其当源文件没有声明charset时特别管用
    • -ss(smart script removal):自动跳过JS渲染生成的广告、推荐位等干扰区块
    • -b 2:设置列表缩进为2个空格,提升可读性
    • 千万别加-nobs参数,否则列表项会失去符号标记,可读性大打折扣

    如果你的HTML是用curl从网址抓取的,记得先检查响应头的编码声明:curl -I url | grep charset。如果发现是GBK编码,需要先通过iconv -f gbk -t utf-8转码,再喂给html2text处理。

    Python + BeautifulSoup 更适合需要精细控制的场景

    当需求变得更复杂时,比如必须删除特定区块(像

    、)、保留表格结构、或者面对多个模板不一致的页面,BeautifulSoup就显示出了它的灵活性。核心代码不长:

    from bs4 import BeautifulSoup
    with open("input.html", "r", encoding="utf-8") as f:
        soup = BeautifulSoup(f, "lxml")
    
    for tag in soup.find_all(["script", "style", "nav", "footer", "aside"]):
        tag.decompose()
    
    text = soup.get_text(separator=" ", strip=True)
    text = "\n".join(line.strip() for line in text.splitlines() if line.strip())

    几个容易踩的坑得提前注意:

    • soup.get_text(separator=" ")用空格分隔——这能防止相邻

      的文字粘成一团
    • 表格需要单独处理:先找出所有标签,再遍历tr/td,否则默认会被压成单行
    • 解析器用lxml,它比内置的html.parser更鲁棒,尤其是面对格式不规范的HTML时
    • Shadow DOM或Web Component这类页面,BeautifulSoup是无能为力的,得先用Puppeteer渲染出静态HTML再处理
    • GUI 工具和在线转换器只适合一次性救急

      最后说说那些号称“一键批量转换”的桌面工具或在线服务。坦白讲,这类工具底层多数只是对html2text或BeautifulSoup的简单封装,但隐藏了编码、过滤、异常处理等关键细节。你不知道它是否跳过了里面的内容,也无法确认块是被原样保留还是一删了之。

      常见的坑包括:

      • 拖入一个GBK编码的HTML,输出TXT全乱码,工具却一声不吭
      • 批量转换中途某个文件报错,整个流程直接中断,还不告诉你具体是哪个文件出了问题
      • 广告模块没过滤干净,导致每份TXT开头都是一句“欢迎访问XXX网站”

      真正需要稳定批量处理的时候,命令行或脚本才是可审计、可复现、可集成进CI/CD的正道。最后说一个最容易被忽略的事实:所有转换方案都假设原始HTML是格式规范的,但现实世界里的网页充斥着嵌套错误、未闭合标签、编码声明缺失——这时候html2text的容错能力,远强于大多数GUI工具内置的解析器。

    实用工具推荐

    电子包浆

    绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

    使用 ›
    图片压缩

    选择画质和输出格式,预览压缩前后的大小。

    使用 ›