html2text是最稳的HTML转文本命令行工具,不依赖浏览器、不崩于嵌套标签或注释,自动过滤脚本/注释/广告,保留段落与列表语义;中文乱码加-utf8,JS干扰块用-ss,批量处理用bash循环。

html2text 是最稳的命令行工具,不用写代码、不依赖浏览器、不崩在嵌套标签或注释上——直接用它,比“另存为文本”和正则替换靠谱得多。
为什么别用浏览器“另存为文本”
浏览器右键菜单里的“另存为文本”看似方便,实际会丢结构、乱码、换行错乱。比如 <h2>标题</h2><p>段落</p> 可能变成“标题段落”连在一起,中间没空行;含中文的页面大概率出现乱码;<script> 或 <style> 里的内容还可能被错误保留。
怎么用 html2text 批量转 HTML 到 TXT
它专为这事设计,能自动过滤广告栏、脚本块、注释,保留段落间距和列表语义。
- 安装(macOS/Linux):
pip install html2text;Windows 同样适用 - 单个文件转换:
html2text input.html > output.txt - 批量处理多个 HTML 文件(bash):
for f in *.html; do html2text "$f" > "${f%.html}.txt"; done - 中文乱码?加
-utf8参数:html2text -utf8 input.html > output.txt - 想跳过导航栏/侧边栏等 JS 渲染干扰块?加
-ss(smart script removal):html2text -ss input.html > output.txt
BeautifulSoup + get_text() 更适合定制化需求
如果你要控制换行逻辑、过滤特定 class 的区块、或者需要从内存中解析 HTML 字符串(比如爬虫返回的结果),BeautifulSoup 更灵活。
立即学习“前端免费学习笔记(深入)”;
- 安装:
pip install beautifulsoup4 - 基础用法:
soup = BeautifulSoup(html_content, 'html.parser'); text = soup.get_text() -
get_text()默认用单个换行分隔块级元素,但不会保留列表符号或链接文字——这点不如html2text直观 - 若需保留链接文字(如把
<a href="...">点击这里</a>转成“点击这里 [url]”),得自己补逻辑,html2text默认就支持
千万别用正则删 <.*?>
HTML 不是正则友好型格式:属性值里可以有 >(如 title="a > b"),注释是 <!-- ... -->,CDATA 块里啥都有。用正则匹配标签,不是漏删就是误删,尤其遇到 <script>document.write("<div>")</script> 这类嵌套,必翻车。
真正容易被忽略的是编码问题——很多网页源码是 GBK 编码,但 html2text 默认按 UTF-8 解,结果一堆问号。先用 file -i input.html 查编码,再用 iconv -f gbk -t utf-8 input.html | html2text -utf8 衔接处理,这步绕不开。



















