document.body.innerText 是浏览器端最直接可靠的提取方式,需 DOM 加载完成;服务端推荐 BeautifulSoup.get_text(),正则 /]*>/g 仅适用于极简 HTML 且风险高。

document.body.innerText 是浏览器环境下最直接、最可靠的提取方式,但必须在页面已加载且 DOM 完整时执行;服务端或批量处理场景下,BeautifulSoup.get_text() 更稳妥,而正则表达式 /]*>/g 仅适合结构极简的 HTML 片段,误删风险高。
用 document.body.innerText 快速提取当前页文本
这是前端调试中最常用的方法,不依赖外部库,直接利用浏览器原生解析能力:
- 打开开发者工具(F12),切换到 Console 面板
- 输入
document.body.innerText并回车,输出即为渲染后可见的纯文本 - 若需排除隐藏元素(如
display: none或visibility: hidden的内容),innerText默认已过滤;但textContent不会,它返回所有文本节点,包括被 CSS 隐藏的 - 注意:如果页面通过 JavaScript 动态注入内容,需等脚本执行完毕再运行该命令,否则会漏掉异步加载的文本
用 BeautifulSoup.get_text() 处理 HTML 字符串或文件
Python 中最主流、最健壮的方案,能正确处理嵌套、自闭合标签、实体编码和不规范 HTML:
- 安装依赖:
pip install beautifulsoup4 - 基础用法:
soup = BeautifulSoup(html_string, "html.parser"); text = soup.get_text() - 保留段落结构:传入
separator="\n",例如soup.get_text(separator="\n", strip=True),可让每个块级元素(如<p>、<h1>)之间换行 - 避免粘连中文:不要用空字符串
sep="",否则像<p>你好<span>世界</span></p>会变成“你好世界”,中间无空格 - 不推荐用
soup.find_all(text=True)拼接,它会漏掉部分注释、CDATA 或 script 标签里的文本,get_text()内部已做完整遍历
为什么不该用正则表达式 /]*>/g 剥离标签
看似简单,实则陷阱密集,尤其在生产环境:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
立即学习“前端免费学习笔记(深入)”;
- 匹配失败:遇到
<script>console.log("x > y");</script>,正则会把>当作标签结束,导致截断或乱码 - 实体未解码:
、等会被原样保留,变成 “ ” 而非空格,“<” 而非 “<li>注释和 CDATA 被忽略:<code><!-- comment -->或<![CDATA[...]]>中的内容可能意外暴露 - 无法处理 malformed HTML:比如缺失闭合标签的
<p>段落一<p>段落二,正则会错误地把整个字符串当做一个标签处理
服务端 Java 场景优先选 Jsoup.parse().text()
Java 生态中,Jsoup 是事实标准,比 DOMDocument 或手动字符串操作可靠得多:
- Maven 依赖:
<groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.17.2</version> - 一行提取:
String text = Jsoup.parse(htmlString).body().text(); - 自动处理编码、转义、script/style 标签剔除,默认不包含这些标签内的文本
- 若需保留换行逻辑,不能只靠
.text(),要遍历元素并拼接:element.childNodes().stream().map(Node::toString).collect(Collectors.joining("\n")),但通常没必要——.text()已足够干净 - 别用
String.replaceAll("<.*?>", ""),它和正则一样脆弱,且对多行、嵌套、属性值含>的情况完全失效
真正容易被忽略的是:HTML 中的文本不等于用户看到的文本。CSS content 伪元素、aria-label、title 属性、alt 文本,这些都不会出现在 innerText 或 get_text() 结果里——如果你需要语义更完整的“可访问文本”,得额外提取这些属性,而不是只盯着标签之间的内容。


















