将任意网页的杂乱 HTML 净化为结构清晰的 Markdown 或干净 HTML,专为阅读优化和知识管理而生

 defuddle

 一个智能的网页内容提取工具,能够将任意网页的杂乱 HTML 净化为结构清晰的 Markdown 或干净 HTML,专为阅读优化和知识管理而生。

功能特性

核心能力

Defuddle 的核心使命是 "去芜存菁" ——它深入解析网页 DOM 结构,精准识别并剥离广告栏、评论区、侧边导航、页脚链接等干扰元素,仅保留文章主体内容。与 Mozilla 经典的 Readability 相比,Defuddle 采取了更为宽容的提取策略,宁可保留疑似内容也不轻易丢弃,同时输出格式更加规范统一。

标准化输出

工具内置强大的 HTML 标准化引擎,确保不同来源的内容呈现一致:
- 标题层级:自动将孤立 H1 转为 H2,移除标题中的锚点链接

  • 代码块:清理语法高亮和行号,保留语言标识为 data-lang 属性
    - 数学公式:将 MathJax、KaTeX 渲染结果统一转换为标准 MathML
  • 脚注系统:规范化内联引用与文末注释的关联格式
  • 提示框:整合 GitHub Alerts、Obsidian Callouts、Bootstrap 等多种来源为统一的 Obsidian 风格标注

 元数据提取

Defuddle 不仅抓取正文,更深度挖掘页面信息:作者署名、发布日期、网站域名、文章摘要、封面图片、语言编码,甚至完整的 Schema.org 结构化数据,为后续归档和检索提供丰富上下文。

多场景适配

项目提供三种专用构建版本:

  • 核心版(defuddle):浏览器环境零依赖,体积最优
  • 完整版(defuddle/full):额外集成数学公式转换与 Markdown 生成
  • Node 版(defuddle/node):服务端渲染,兼容 JSDOM、linkedom 等任意 DOM 实现

 使用方式

 浏览器直接调用

import Defuddle from 'defuddle';

const defuddle = new Defuddle(document);
const result = defuddle.parse();

console.log(result.content);  // 净化后的 HTML
console.log(result.title);      // 文章标题
console.log(result.author);     // 作者信息
 

 Node.js 服务端处理

import { parseHTML } from 'linkedom';
import { Defuddle } from 'defuddle/node';

const { document } = parseHTML(html);
const result = await Defuddle(document, 'https://example.com/article', {
  markdown: true  // 直接输出 Markdown
});
# 解析本地文件
npx defuddle parse article.html --markdown

# 抓取远程页面
npx defuddle parse https://example.com/post --json -o result.json

# 仅提取标题
npx defuddle parse page.html --property title

 调试与精细控制

开发阶段可启用调试模式,查看内容选择器的决策路径和元素移除记录;针对特殊页面布局,支持通过 contentSelector 强制指定主内容区域,或逐项关闭清理管道中的特定步骤。

 使用工具

©版权声明
THE END
喜欢就支持一下吧
点赞0 赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容