HTML中无法直接用DOM操作去重段落,必须将HTML当作文本处理:提取p标签内容→按需去重(如trim、toLowerCase)→重建HTML结构。

HTML 文件里没有“段落去重”这种原生概念,所谓批量删除重复文本段落,本质是:把 HTML 当纯文本处理,用正则或脚本提取/比对/过滤 标签内的文字内容,再重建结构——直接靠浏览器 DOM 操作做不到。
为什么不能用 querySelectorAll('p') 去重?
DOM 层面的 Hello 必须跳出“在网页里操作”的思维。把 HTML 当作带标签的文本流来处理,分三步走: ]*>([\s\S]*?) ... 如果你只是想快速清理一个本地 这行命令做了四件事: 你删掉的可能不只是文字。比如 警告请勿触摸 警告请勿触摸p 元素不是按“文本内容是否重复”组织的,而是按嵌套关系和属性存在的。两个 可能分别在不同 textContent 看似一样,但实际字符串不等价。更关键的是:document.querySelectorAll('p') 返回的是实时节点引用,无法跨文件、无法做集合去重,也不保留原始顺序以外的语义。
Set 存 p.textContent.trim() 会误杀:比如 “Apple” 和 “apple” 被判不同,“ Hello ” 和 “Hello” 被判不同<script></script>、、内联样式等上下文全丢失,不是“删段落”,是“撕文档”真正可行的路径:导出 → 提取 → 去重 → 重建
(注意启用 g 和 s 标志)捕获所有 内容,保留原始换行与空白;或用 cheerio(Node.js)/ BeautifulSoup(Python)解析后取 .text
new Set(paragraphs.map(p => p.trim().toLowerCase()))
,再拼回完整文档——别忘了补 等外壳,否则浏览器打不开命令行快速去重(推荐给单文件场景)
page.html,不用写完整脚本,终端一行就能跑:cat page.html | perl -0777 -pe 's/<p>]*>([\s\S]*?)/\n__P_START__\n\n__P_END__\n/g; s/<!--[\s\S]*?-->//g' | awk '/__P_START__/{flag=1;next}/__P_END__/{flag=0;if (p && !seen[p]++) print "</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill10246" title="HTML Text Extract"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20dee630206.jpg" alt="HTML Text Extract" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill10246" title="HTML Text Extract" class="overflowclass">HTML Text Extract</a>
<p class="overflowclass">从HTML页面(URL、文件或标准输入)中提取主体内容文本,去除导航、页脚、广告和模板文本。可直接传递给readability_check或其他文本工具。</p>
</div>
<a rel="nofollow" href="/xiazai/skill10246" title="HTML Text Extract" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><p>" p "</p>"; p="";next} flag{p = p $0} END{if (p && !seen[p]++) print "<p>" p "</p>"}' > cleaned.html
perl 阶段先提取所有 内容并标记边界,同时删注释;awk 阶段按段落文本去重、过滤空行、再包回 。注意它不处理嵌套 (HTML 规范本身禁止嵌套),也不修复 malformed HTML——输入得基本合法。容易被忽略的坑:HTML 不是纯文本,但去重必须当纯文本处理
和 文本一样,但语义不同;又比如含 <script></script> 的段落,提取 textContent 后脚本就没了。所以真正安全的做法是:先人工确认哪些段落允许“只看文字去重”,再决定用正则还是解析器;如果段落里有重要内联结构,就别批量删——宁可手动筛,也别让自动化破坏语义。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










