一个浏览器扩展的开发者,花了11个月,把Mozilla Readability的核心逻辑推倒重来。成果是Defuddle——一个能从任意网页提取正文的工具,代码量比原版少了40%,却多支持了Markdown输出和命令行调用。
这事有点像手机贴膜。Readability是原厂膜,能用但边角总有气泡;Defuddle是第三方精修版,把气泡刮干净了,还加了防窥层。
为什么非要造这个轮子
Readability诞生于2010年,Firefox后来把它内置到浏览器,Safari的「阅读模式」也基于它。但11年过去,网页结构早已变天——单页应用、动态加载、无限滚动,这些现代技术让老逻辑频频失灵。
Obsidian Web Clipper的开发者Kepano在GitHub issue里吐槽过:「Readability会把评论区当成正文抓进来,或者漏掉嵌在JSON里的文章数据。」他的用户每天要从几百个网站剪藏内容,容错率极低。
Defuddle的诞生场景很具体:不是要做「更好的Readability」,而是要让Obsidian的剪藏功能不再翻车。目标窄,反而做得深。
Defuddle的处理流程分三步:先解析HTML结构,再评分筛选主内容区,最后清洗输出。评分算法重新设计过,对现代框架生成的DOM更敏感。
关键差异:不是功能更多,是假设不同
Readability的设计假设是「网页是静态文档」,Defuddle的假设是「网页是动态生成的容器」。这个底层差异体现在几个细节:
Readability只输出HTML,Defuddle默认同时支持HTML和Markdown。后者对笔记软件用户是刚需——Obsidian、Notion、Logseq都原生支持Markdown粘贴,省去一道格式转换。
Node.js环境的支持方式也不同。Readability需要开发者自己封装DOM环境,Defuddle直接提供defuddle/node子模块,兼容JSDOM、linkedom、happy-dom等主流实现。配置成本从「写适配层」降到「装依赖包」。
最实用的可能是CLI工具。一行命令npx defuddle parse URL --markdown,就能把任意网页转成干净文本。爬虫工程师、数据分析师、做内容归档的人,能省掉一堆解析脚本。
性能数据目前只有开发者自测:处理典型新闻页面,Defuddle比Readability快约15%,内存占用低20%。没有第三方benchmark,这个数字先当参考。
代码结构:小而封闭
Defuddle的源码组织很「产品经理友好」——核心逻辑约800行TypeScript,分成parser、scorer、cleaner三个模块。没有外部依赖,打包后体积67KB。
对比Readability的源码:1400行JavaScript,混杂着浏览器兼容代码和废弃的API调用。Mozilla这几年主要靠社区PR维护,核心架构没动过。
但Defuddle也有代价。Readability经过11年实战检验,处理了数亿个网页的边角案例;Defuddle的测试集目前只有开发者自己收集的2000个页面,长尾问题必然存在。
「Beware! Defuddle is very much a work in progress!」——项目首页的警告用全大写加粗,不是谦虚,是免责声明。
谁该关注这个工具
三类人可能用得着:
做内容聚合产品的开发者。Readability的授权是Apache 2.0,但架构老旧;Defuddle同样是开源,代码更现代,二次开发成本更低。
重度依赖网页剪藏的知识管理用户。Obsidian Web Clipper已经内置Defuddle,Notion和印象笔记的剪藏功能如果愿意换引擎,解析准确率可能提升。
需要批量处理网页文本的数据工程师。CLI工具+JSON输出,能直接对接下游的NLP流水线或数据库。
但别急着迁移。Defuddle的GitHub仓库只有3个贡献者,issue响应速度未知;Readability背后有Mozilla的工程师社区,稳定性更有保障。新项目适合尝鲜,核心系统建议观望。
Kepano在发布帖里写了一句很产品经理的话:「Defuddle不是Readability的替代品,是它的重新想象。」
这种区分很微妙——前者是竞争关系,后者是继承关系。技术债还清的瞬间,新债也在产生。11年后,会不会有人再写一遍Defuddle?
热门跟贴