2025-01-30
我当然不会试图摘月,我要月亮奔我而来。——奥黛丽赫本
https://github.com/mozilla/readability
最近发现了一款由 Mozilla 开发的开源工具 Readability.js,这是一个专注于网页内容提取的库,它能够快速解析网页中的正文内容,过滤掉广告、导航栏等干扰信息。Firefox 的“阅读模式”正是基于 Readability.js 实现的。这款工具对于需要优化网页阅读体验、自动提取文章内容的开发者来说非常实用。
什么是 Readability.js
Readability.js 是 Mozilla 为了提升用户网页阅读体验而开发的一个工具,能够将网页上的主要内容提取出来并生成清爽的 HTML 片段。它非常适合集成到浏览器扩展、阅读器应用、内容聚合平台等项目中。
安装和使用
1. 安装
在 Node.js 环境中可以通过 npm 直接安装:
1 |
|
2. 基本使用
要使用 Readability.js 提取网页内容,只需传入一个 DOM 文档对象并调用 parse()
方法:
1 |
|
提取的结果包含文章标题、正文、摘要等信息。
API 参考
1. 创建 Readability 实例
1 |
|
可以传入一些可选参数 options
进行配置:
- debug(默认
false
):启用调试日志输出。 - maxElemsToParse(默认
0
):设置解析的最大元素数量。 - nbTopCandidates(默认
5
):分析内容时的候选节点数量。 - charThreshold(默认
500
):最低字符数量限制,内容长度不足时不会返回结果。 - classesToPreserve:指定要保留的 HTML 类名。
- keepClasses(默认
false
):是否保留所有 HTML 类名。 - serializer:自定义序列化函数,默认返回 HTML 字符串。
- disableJSONLD(默认
false
):是否禁用 JSON-LD 格式的元数据解析。
2. 解析网页内容
使用 parse()
方法解析网页:
1 |
|
返回的对象包含以下属性:
- title:文章标题
- content:提取后的 HTML 正文
- textContent:纯文本形式的内容
- length:正文长度(字符数)
- excerpt:文章摘要
- byline:作者信息
- lang:内容语言
- publishedTime:发布时间
示例代码:
1 |
|
3. 判断是否适合阅读模式
使用 isProbablyReaderable()
方法可以快速判断网页是否适合提取正文内容:
1 |
|
可选参数 options
:
- minContentLength:节点内容的最小长度(默认
140
) - minScore:最低评分(默认
20
) - visibilityChecker:判断节点可见性的函数
该方法不会消耗太多性能,非常适合在页面加载时快速做出判断。
Node.js 使用
在 Node.js 中,由于没有原生 DOM 实现,需要借助 jsdom
:
1 |
|
需要注意:传递 URL 是为了正确转换网页中的相对路径(如图片和链接)为绝对路径。
安全性建议
在处理不受信任的 HTML 内容时,建议使用 DOMPurify 或其他 HTML 安全过滤库来防范 XSS 攻击。此外,结合 CSP(Content Security Policy) 进一步加强安全性。
Mozilla 在 Firefox 的阅读模式中使用了这些安全措施,因此我们也推荐在自己的项目中应用类似策略。
应用场景
-
阅读器模式
集成到浏览器或阅读器应用中,自动生成简洁的阅读页面。 -
内容聚合
在内容聚合平台中自动抓取网页文章,提升内容展示效果。 -
网页内容存档
对网页进行内容提取并存储,适用于书签管理器或离线阅读器。 -
SEO 分析
自动提取网页正文用于搜索引擎优化和数据分析。
Readability.js 是一个强大的网页内容提取工具,可以极大地提升用户的阅读体验。它的轻量和易用性使其成为开发者的理想选择。想要体验这款工具,快到 GitHub 项目页面 下载试用吧!