跳到主要内容

去除HTML标签提取纯文本:从网页复制干净文字的实用方法

从网页源码、富文本编辑器、邮件模板里去掉HTML标签,只留纯文本。块级标签转换行保住段落,HTML实体还原成正常字符,script代码整块删掉,适合导入数据库和做字数统计。

发布于 作者 李雷
#HTML #纯文本 #文本处理 #数据清洗 #SEO

去除HTML标签,提取纯文本:把网页内容洗成干净文字

从网页上复制一段文字,粘到记事本或数据库里,经常会带出一堆看不懂的东西:<p><span class="...">&nbsp;&amp;。这些是 HTML 的写法,不是正文。把它们清掉,只留下人能直接读的文字,就是去除 HTML 标签这件事要解决的问题。

为什么纯文本这么重要

带标签的内容看着是文字,实际上夹了大量标记。这些标记在三个场景里会直接坏事。

一是从网页复制干净文字。论坛、公众号、在线文档里的内容往往套了好几层标签,直接复制到聊天框或代码注释里,排版会乱,实体字符会原样显示出来。

二是导入数据库。一个字段里如果混着 <div> 和内联样式,全文检索会把标签名也当成内容索引,查询结果就不准。存进去之前先剥成纯文本,字段才干净。

三是字数统计。带标签去数字数,<p>、class 名都会被算进去,数出来的数字虚高。先去格式再统计,中文按字、英文按词才准。

去掉标签,但要保住正文内容

去标签不是简单地把尖括号里的东西删光那么粗暴。一个容易踩的坑是 script 和 style 标签:普通的处理只删掉 <script></script> 这对标签,中间那段 JavaScript 反而漏进了正文,变成一长串乱码。正确的做法是先把 script 和 style 这两块连标签带内容整个切掉,再去剩下的标签,正文里就不会冒出 function() {...} 或一大堆 CSS。

段落结构也要保住。pdivlih1h6brtr 这些标签表示一段或一行的结束,把它们换成换行符,输出读起来就跟原网页的分段一致,而不是被压成一坨连在一起的长句。

HTML 实体也要还原

从网页里抠出来的文字常带转义写法:&amp;&nbsp;&#39;。这些叫 HTML 实体,是为了在 HTML 里安全地表示特殊字符,本身不是正文的一部分。不还原的话,粘到别处会被当成普通字符显示出来,读者看到的就是 &amp; 而不是 &

还原规则很直接:&amp; 变回 &,&lt; 变回 <,&gt; 变回 >,&quot; 变回双引号,&#39; 变回单引号,&nbsp; 变回空格。数字实体如 &#65; 和十六进制 &#x41; 也都能转成对应字符。

一个真实的例子

假设你从网页源码里复制了这么一段:

<h1>商品价格</h1><p>原价 <b>&yen;199</b>,现价 <b>&yen;99</b>&nbsp;包邮</p>

开着块级标签转换行和解码实体,输出就是:

商品价格
原价 ¥199,现价 ¥99 包邮

标题单独一行,正文一行,<b> 标签去掉了但里面的价格留着,&yen; 还原成了货币符号,&nbsp; 变回了正常空格。这就是「去掉标签、保留内容」该有的样子。

我自己的用法

我平时写脚本抓页面,抓回来的 HTML 满是 div、内联样式,还夹着统计代码。以前我用正则一点点清,经常漏掉 script 块,清出来的语料里混着 JavaScript,喂给模型当训练数据还得返工。后来固定先把整段粘进 strip-html-tags,块级标签转换行开着,script 内容自动删掉,出来就是带段落的干净正文,省了写一堆正则的功夫。需要保留 ba 这种标签时,填进白名单就行,其余照样去掉。

什么时候不该用它

如果你想保留格式继续编辑,比如把网页搬进笔记或博客,那要的不是纯文本,而是结构。这种情况下 html-to-markdown 更合适:它把 <b> 转成 **<a> 转成 [文字](链接),格式留着,搬进 Markdown 编辑器还能接着改。

反过来,如果你需要把纯文本编码成 HTML 实体安全地放进网页,可以用 html-entities-encoder 做相反的事。去完标签想批量替换某些词,接 find-and-replace-text;只想数数有多少字,去 word-counter

去标签看着是个小操作,但 script 漏出、实体没还原、段落被压平这几个细节决定了结果能不能直接用。处理对了,你拿到的就是一段干净、可读、可入库的纯文字。


Made by Toolora · Updated 2026-06-13