https://github.com/mozilla/readability
最近发现了一款由 Mozilla 开发的开源工具 Readability.js,这是一个专注于网页内容提取的库,它能够快速解析网页中的正文内容,过滤掉广告、导航栏等干扰信息。Firefox 的“阅读模式”正是基于 Readability.js 实现的。这款工具对于需要优化网页阅读体验、自动提取文章内容的开发者来说非常实用。
Readability.js 是 Mozilla 为了提升用户网页阅读体验而开发的一个工具,能够将网页上的主要内容提取出来并生成清爽的 HTML 片段。它非常适合集成到浏览器扩展、阅读器应用、内容聚合平台等项目中。
在 Node.js 环境中可以通过 npm 直接安装:
1 | npm install @mozilla/readability |
---|
要使用 Readability.js 提取网页内容,只需传入一个 DOM 文档对象并调用 parse()
方法:
1 | var article = new Readability(document).parse(); |
---|
提取的结果包含文章标题、正文、摘要等信息。
1 | new Readability(document, options) |
---|
可以传入一些可选参数 options
进行配置:
false
):启用调试日志输出。0
):设置解析的最大元素数量。5
):分析内容时的候选节点数量。500
):最低字符数量限制,内容长度不足时不会返回结果。false
):是否保留所有 HTML 类名。false
):是否禁用 JSON-LD 格式的元数据解析。使用 parse()
方法解析网页:
1 | let article = new Readability(document).parse(); |
---|
返回的对象包含以下属性:
示例代码:
12345 | var documentClone = document.cloneNode(true);var article = new Readability(documentClone).parse();console.log('标题:', article.title);console.log('内容:', article.content); |
---|
使用 isProbablyReaderable()
方法可以快速判断网页是否适合提取正文内容:
123 | if (isProbablyReaderable(document)) { let article = new Readability(document).parse();} |
---|
可选参数 options
:
140
)20
)该方法不会消耗太多性能,非常适合在页面加载时快速做出判断。
在 Node.js 中,由于没有原生 DOM 实现,需要借助 jsdom
:
123456789101112 | const { Readability } = require('@mozilla/readability');const { JSDOM } = require('jsdom');const doc = new JSDOM("<body>这是一段示例文本</body>", { url: "https://example.com"});let reader = new Readability(doc.window.document);let article = reader.parse();console.log(article.title);console.log(article.textContent); |
---|
需要注意:传递 URL 是为了正确转换网页中的相对路径(如图片和链接)为绝对路径。
在处理不受信任的 HTML 内容时,建议使用 DOMPurify 或其他 HTML 安全过滤库来防范 XSS 攻击。此外,结合 CSP(Content Security Policy) 进一步加强安全性。
Mozilla 在 Firefox 的阅读模式中使用了这些安全措施,因此我们也推荐在自己的项目中应用类似策略。
Readability.js 是一个强大的网页内容提取工具,可以极大地提升用户的阅读体验。它的轻量和易用性使其成为开发者的理想选择。想要体验这款工具,快到 GitHub 项目页面 下载试用吧!