从网页上复制一段文字,粘贴到别的地方,结果带过来一堆乱七八糟的 HTML 标签和格式代码。这种情况应该不少人都遇到过。这篇文章讲一下什么时候需要去掉 HTML 标签,以及怎么用工具干净地把纯文本提取出来。

什么情况下需要去掉 HTML 标签

需要处理 HTML 并提取纯文本的场景其实挺多的,不只是"从网页复制文字"这么简单:

  1. 爬虫数据清洗:写爬虫抓下来的网页内容是一坨 HTML 代码,里面混杂着各种标签、属性、脚本、样式表。要做文本分析或者存入数据库的话,得先把 HTML 剥掉只留正文。这是最常见的需求之一。
  2. 邮件正文提取:HTML 格式的邮件源码里嵌套了大量的 table、div、style 标签。有时候只需要邮件的纯文本内容来做归档或搜索索引,这时候就要把 HTML 标签全部清理掉。
  3. 从网页复制内容:直接从浏览器复制文字到 Word、记事本或者其他编辑器里,经常会带上隐藏的格式信息。看起来是纯文字,实际上里面夹杂着 span、font 之类的标签,导致后续排版出问题。
  4. RSS/Atom 内容处理:Feed 里拿到的文章摘要或全文通常包含 HTML 标签。如果要在自己的应用里展示纯文本版本,就需要做一次清洗。
  5. CMS 内容迁移:从一个 CMS 系统迁移数据到另一个系统时,目标系统可能不支持富文本,只能接受纯文本输入,这时也需要先把 HTML 标签去掉。

这个工具具体能做什么

HTML 清理工具的核心功能就一件事:移除所有 HTML 标签,保留文本内容和基本的段落结构。

举个例子,如果你贴进去这样的内容:

<div class="article">
  <h2>标题</h2>
  <p>这是一段<strong>重要</strong>的文字内容。</p>
</div>

处理后得到的是:

标题
这是一段重要的文字内容。

可以看到,<div><h2><p><strong> 这些标签都被去掉了,但文字本身完整保留了下来,段落之间的换行关系也维持住了。

工具在处理时会自动处理这些情况:

  • 移除所有 HTML 标签(包括开标签、闭标签和自闭合标签)
  • 处理 HTML 实体编码(比如 &amp; 转成 &&lt; 转成 <
  • 去除 script 和 style 标签内的内容(这些不是可见文本)
  • 将连续的空白字符压缩成单个空格,避免出现大段空白
  • 保留段落结构,让输出的文本有可读性

和直接复制粘贴有什么区别

有人可能会问:我从网页上 Ctrl+C 然后 Ctrl+V 到记事本里,不也能得到纯文本吗?干嘛还要专门用个工具?

直接复制粘贴确实能去掉大部分可见的标签,但它有几个问题:

格式残留:浏览器复制的时候会尽量保持"看起来一样"的效果,所以可能会带入一些你看不到的格式标记。比如某些编辑器粘贴后会保留字体颜色、加粗、斜体等样式,即使你只是想贴一段纯文字。

不完整的内容:有些网页用了 JavaScript 动态加载内容,你看到的页面和实际的 HTML 源码不一样。复制操作拿到的是渲染后的结果,但如果你的需求是从原始 HTML 源码中提取文本(比如处理爬虫抓到的 raw HTML),那复制粘贴就不管用了。

批量处理不行:复制粘贴是一次性的操作。如果你有几十个 HTML 文件要处理,一个一个打开再复制显然不现实。用工具可以批量输入然后一次性得到所有结果。

不可编程:如果这个过程是某个数据处理流水线的一部分,你需要的是一个可以脚本化调用的方式,而不是手动操作 GUI 的流程。

进阶用法:选择性保留标签

默认情况下工具会把所有 HTML 标签都去掉。但在某些场景下,你可能希望保留部分标签来维持一定的结构。

比较常见的例子:

  • 保留 br 和 p 标签:去掉其他所有标签,但保留换行相关的标签,这样输出文本的段落结构不会塌成一团。
  • 保留 strong 和 em 标签:如果你后续要把文本转成 Markdown,保留加粗和斜体标记可以直接对应成 *** 语法。
  • 保留 a 标签:提取文本的同时保留链接信息,这样你知道哪些文字原来是超链接。
  • 保留 img 的 alt 属性:虽然图片本身没法显示,但 alt 文本是有价值的内容。

这类选择性保留的功能在不同工具里的实现方式不一样。有些提供勾选框让你指定要保留哪些标签,有些则支持自定义规则。根据实际需求选择就行。

HTML 标签清理的原理是什么

如果你对背后的实现感兴趣,这里简单说一下思路。去掉 HTML 标签这件事有几种做法:

正则表达式:最直接的方式是用正则匹配所有 <[^>]*> 模式并替换为空字符串。这种方法写起来快,但对复杂的 HTML 处理不够健壮——碰到标签属性里有 > 字符或者注释、CDATA 块之类的情况就容易出错。

HTML 解析器:更可靠的做法是用专门的 HTML 解析库(Python 的 BeautifulSoup、JavaScript 的 Cheerio、Go 的 goquery 等)先解析成 DOM 树,再遍历节点提取文本内容。解析器能正确处理嵌套、注释、畸形标签等边界情况,输出的质量更稳定。

浏览器 API:如果在浏览器环境里运行,可以利用 DOM API 直接操作——把 HTML 字符串赋给一个临时元素的 innerHTML,然后再读取它的 textContent 或 innerText 属性。浏览器内置的 HTML 解析器帮你处理了所有脏活累活。

在线工具一般用的是后面两种方案,毕竟要处理用户提交的各种 HTML 片段,鲁棒性很重要。

使用 HTML 清理工具要注意什么

使用 HTML 清理工具时有几个地方值得留意:

  • 中文空格问题:HTML 中多个连续空格会被压缩成一个,中英文混排时可能影响阅读体验。清理后最好检查一下是否有需要手动调整间距的地方。
  • 特殊符号:HTML 里的特殊字符(如版权符号 ©、商标符号 ™、数学符号等)是以实体编码形式存在的,工具通常会做解码转换,但偶尔会有遗漏。
  • 表格数据:如果原 HTML 包含表格,去掉标签后表格结构就没了,单元格之间用什么分隔符连接会影响后续使用。有些工具会提供选项让用户选择是否将表格转为特定格式的文本。

常见问题

清理后格式全丢了怎么办?

这是正常的。去掉 HTML 标签意味着去掉所有格式信息。如果需要保留段落和换行,可以用"选择性保留"功能,只保留 p、br 标签。或者先用 HTML 转 Markdown 工具转换,再清理剩余标签。

能批量处理多个文件吗?

在线工具目前支持单次粘贴处理。如果需要批量清理,可以把多个文件内容拼接后一次性粘贴,处理完再手动分割。或者写个简单的脚本用正则替换,效果一样。

script 标签里的代码会被清理吗?

会。工具会移除所有 HTML 标签及其内容,包括 script、style 标签内的代码。这是安全的设计——防止 XSS 代码残留。如果你需要保留代码内容,先手动提取再清理。

总结

HTML 清理是个看似简单但细节挺多的活。大部分时候你只需要把标签去了拿纯文本就行,但遇到复杂 HTML 或者有特殊格式要求的时候,还是得选对工具和方法。在线工具的好处是不用写代码不用装依赖,贴进去点一下就能拿到结果,适合偶尔用用的场景。如果是长期固定流程的一部分,可以考虑用脚本库集成到你自己的系统里。