如何批量将HTML文件转换为TXT
实战中,直接命令行一把梭是最快的。比如在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工具内置的解析器。 - 解析器用
