Defuddle 实战手册:从 CLI 到 Node.js API 的 8 组对比测试
Defuddle 实战手册从 CLI 到 Node.js API 的 8 组对比测试全部测试在 macOS Node.js 22 环境下实际运行输出为真实终端记录。环境准备# 方式一全局安装npminstall-gdefuddle# 方式二npx 免安装运行本文使用此方式npx defuddle0.19.3--version# 输出: 0.19.3# Node.js API 使用需额外安装 DOM 解析器cd/tmpnpminstalllinkedom defuddle当前版本0.19.3MIT 协议TypeScript 编写。测试 1基础提取——博客文章转 Markdown目标从 Steph Ango 的博客提取一篇短文。npx defuddle0.19.3 parsehttps://stephango.com/saw--markdown实际输出When I learned to use a table saw, my teacher impressed upon me that the machine wants to cut fingers. Fear the saw! Powerful tools can do powerful things. If you want to make handmade wooden furniture you must cut wood. Your desire to have limbs and your desire to have furniture are not at odds if you learn to use tools safely. There *are* table saws that will stop at the touch of a finger, but I dont know of any chainsaw that wont cut an arm. There is a limit to how safe a tool can be before its function is crippled. We should not stop making powerful tools because they are dangerous. Rather, we should empower people to use powerful tools safely. I use the saw, I fear the saw. I have handmade furniture, and I have all my limbs.结果143 词102ms。导航栏、侧边栏、页脚全部干净移除正文完整。测试 2JSON 输出——提取元数据npx defuddle0.19.3 parsehttps://stephango.com/saw--json实际输出字段一览字段值titleUse the saw, fear the sawauthorSteph AngodescriptionIt’s hard to make a saw that cuts trees but not arms.domainstephango.comsiteSteph AngolanguageenwordCount143parseTime98mspublished2025-10-20T00:00:0000:00imagehttps://stephango.com/assets/card.pngfaviconhttps://stephango.com/favicon.icometaTags16 个 meta 标签含 og: 和 twitter:schemaOrgData空数组该页无结构化数据content804 字符的 HTML 正文--json适合脚本化处理一次拿到内容和全部元数据。测试 3Frontmatter 输出——知识库入库格式npx defuddle0.19.3 parsehttps://github.com/kepano/defuddle--markdown--frontmatter实际输出头部---title:kepano/defuddle: Get the main content of any page as Markdown.author:kepanosite:GitHubsource:https://github.com/kepano/defuddledomain:github.comlanguage:endescription:Get the main content of any page as Markdown...word_count:1627---正文紧随其后378 行 Markdown。这是 Obsidian Web Clipper 内部使用的格式——带 YAML 前言的 Markdown直接可以存入 Obsidian 笔记库。测试 4Debug 模式——追踪提取决策链npx defuddle0.19.3 parsehttps://stephango.com/saw--debug实际输出Defuddle: Content candidates: [ { element: ARTICLE, selector: html body main article, score: 478 }, { element: BODY, selector: html body, score: 459.8 }, { element: MAIN, selector: html body main, score: 422.5 } ] Defuddle: Removed hidden elements: 1 Defuddle: Removed clutter elements: { exactSelectors: 35, partialSelectors: 2, total: 37 } Defuddle: Removed non-content blocks: { count: 0 }关键信息3 个候选区域参与评分article以 478 分胜出37 个干扰元素通过选择器精确移除35 个精确匹配 2 个模糊匹配1 个隐藏元素被移除display:none的内容总耗时 102msdebug 模式是排查「为什么某段内容被误删」的第一手段。测试 5属性提取——只取一个字段# 只提取标题npx defuddle0.19.3 parsehttps://stephango.com/saw--propertytitle# 输出: Use the saw, fear the saw# 只提取作者npx defuddle0.19.3 parsehttps://stephango.com/saw--propertyauthor# 输出: Steph Ango# 只提取字数npx defuddle0.19.3 parsehttps://stephango.com/saw--propertywordCount# 输出: 143适合在脚本中只取元数据、不需要正文的场景。测试 6管道模式——curl 管道提取curl-sLhttps://stephango.com/saw|npx defuddle0.19.3 parse--markdown输出与测试 1 完全一致。管道模式的优势可以先用 curl 加自定义 header如 cookie、User-Agent抓取需要登录或反爬的页面再交给 Defuddle 提取。测试 7Node.js API——编程调用import{parseHTML}fromlinkedom;import{Defuddle}fromdefuddle/node;consthtml!DOCTYPE htmlhtmlheadtitleTest Article/title/headbody nava href/Home/a | a href/aboutAbout/a/nav article h1Hello World/h1 pThis is a test article with some content./p pAnother paragraph here with more text./p /article asideSubscribe to our newsletter!/aside footerCopyright 2026/footer /body/html;const{document}parseHTML(html);constresultawaitDefuddle(document,https://example.com/test,{markdown:true});console.log(result.title);// Test Articleconsole.log(result.wordCount);// 33console.log(result.content);实际输出{title:Test Article,wordCount:33,parseTime:46,content:## Hello World\n\nThis is a test article with some content. It has enough text to be recognized as the main content area.\n\nAnother paragraph here with more text to increase the content score.}导航栏nav、侧边栏aside、页脚footer全部自动移除只保留article内的正文。46ms 完成。手动指定 contentSelector当自动检测不准时可以用contentSelector精确指定正文区域constmanualawaitDefuddle(doc2,https://example.com/test,{markdown:true,contentSelector:.main-content// 跳过自动评分直接用 CSS 选择器});实测对比模式提取字数内容自动检测36 词正确提取.main-content区域手动选择器30 词同样提取.main-content但排除了更多噪音两种方式结果接近。手动选择器适合对特定网站结构已知、需要精确控制的场景。测试 8压缩率对比——原始 HTML vs Defuddle 输出# 原始 HTML 大小curl-sLhttps://stephango.com/saw-o/tmp/raw.htmlwc-c/tmp/raw.html# 输出: 11459 bytes# Defuddle Markdown 输出大小npx defuddle0.19.3 parsehttps://stephango.com/saw--markdown|wc-c# 输出: 750 bytes指标数值原始 HTML11,459 bytesDefuddle Markdown750 bytes压缩比15.3x这意味着喂给 LLM 时token 消耗只有原来的 1/15。对于 AI 上下文准备场景这直接影响成本。CLI 选项速查表选项简写用途--markdown-m输出 Markdown 格式--json-j输出 JSON含元数据正文--frontmatter-f输出带 YAML 前言的 Markdown--property name-p只提取指定字段--output file-o输出到文件--debug调试模式输出决策过程--lang code-l指定语言偏好--user-agent string-u自定义 User-Agent总结测试场景推荐用法关键指标快速提取正文npx defuddle parse url -m102ms / 143词批量脚本处理--jsonjq一次拿全元数据知识库入库--markdown --frontmatterYAML Markdown排查误删内容--debug评分移除明细只取元数据--property title单字段输出反爬/登录页curl管道自定义 header编程集成Node.js API linkedom46ms / 33词LLM 上下文准备--markdown15.3x 压缩Defuddle 的 CLI 覆盖了从快速提取到脚本化批处理的完整场景链。配合 Node.js API可以在任何需要网页内容提取的环节直接嵌入。项目地址https://github.com/kepano/defuddle安装npm install -g defuddle或npx defuddle parse url本文所有输出均为实际终端运行结果。

相关新闻

DaVinci Configurator实战:从零配置AUTOSAR OS内存保护单元(MPU)

DaVinci Configurator实战:从零配置AUTOSAR OS内存保护单元(MPU)

这次我们来看一个在汽车电子领域至关重要的工具链——DaVinci Configurator,它专为AUTOSAR(汽车开放系统架构)的配置与管理而生。对于从事汽车ECU(电子控制单元)底层软件开发、系统集成或软件架构设计的工程师来说&…

2026/8/25 18:49:43 阅读更多 →
从零部署Codex:构建AI智能体操作系统内核的实战指南

从零部署Codex:构建AI智能体操作系统内核的实战指南

如果你最近在关注AI智能体,可能会发现一个现象:很多文章都在讲概念、讲架构、讲未来,但当你真正想动手,让一个AI智能体去帮你操作一个真实应用——比如自动回复微信、自动处理邮件、自动填写网页表单时,却常常卡在第一…

2026/8/25 18:48:43 阅读更多 →
冒泡排序算法详解:原理、优化与面试技巧

冒泡排序算法详解:原理、优化与面试技巧

1. 冒泡排序的核心原理与面试价值冒泡排序作为最基础的排序算法之一,在技术面试中出现的频率远超实际工程应用。这背后有个有趣的悖论:越是简单的算法,面试官越喜欢考察候选人的理解深度。我第一次在面试中被要求手写冒泡排序时,只…

2026/8/25 18:48:43 阅读更多 →

最新新闻

xAI技术型HR如何颠覆AI人才招聘模式

xAI技术型HR如何颠覆AI人才招聘模式

1. 科技巨头的人才争夺战新动向硅谷的招聘战争正在进入一个全新阶段。当传统科技公司还在用高薪和股票期权吸引人才时,马斯克旗下的xAI公司已经组建了一支特殊的"人才狙击队"。这支团队不同于传统HR部门,他们由顶尖工程师和科学家组成&#xf…

2026/8/25 19:33:03 阅读更多 →
腾讯云轻量服务器四大套餐深度解析:从入门到存储,如何精准选型与成本优化

腾讯云轻量服务器四大套餐深度解析:从入门到存储,如何精准选型与成本优化

1. 项目概述:一次搞懂轻量服务器的选型逻辑 最近身边不少朋友和同事在聊上云的事儿,尤其是个人开发者、学生或者想搞点小项目练手的朋友,总在问同一个问题:“腾讯云那个轻量服务器,入门型、通用型、锐驰型、存储型&…

2026/8/25 19:33:03 阅读更多 →
GigaBrain-0.7:System-3与双塔架构的具身智能模型实战指南

GigaBrain-0.7:System-3与双塔架构的具身智能模型实战指南

在具身智能和通用人工智能的浪潮中,模型架构的创新与开源生态的繁荣是推动技术普惠的关键。近期,由“极佳视界”团队发布的GigaBrain-0.7模型,因其“开源第一”的定位和创新的System-3 双塔体系架构,迅速在开发者社区和学术界引起…

2026/8/25 19:33:03 阅读更多 →
智慧高速“云-网-边-端”架构演进:从连接升维到协同深化的技术实践

智慧高速“云-网-边-端”架构演进:从连接升维到协同深化的技术实践

1. 从“云-边-端”到“云-网-边-端”:智慧高速架构的演进与核心变化最近和几个在交通领域做项目的朋友聊天,大家不约而同地提到了一个词:“云-网-边-端”。这个词在智慧高速、车路协同的圈子里,热度越来越高,几乎成了新…

2026/8/25 19:33:03 阅读更多 →
微服务架构核心技术与面试高频考点解析

微服务架构核心技术与面试高频考点解析

1. 微服务架构基础概念解析微服务架构已成为现代分布式系统设计的黄金标准,它通过将单一应用拆分为一组小型服务来提升系统的可维护性和可扩展性。每个服务运行在自己的进程中,通过轻量级机制(通常是HTTP RESTful API)进行通信。这…

2026/8/25 19:33:03 阅读更多 →
人形机器人技术进阶:从概念验证到综合工程能力实战

人形机器人技术进阶:从概念验证到综合工程能力实战

上周,我偶然点开一个科技新闻,标题是“第二届世界人形机器人运动会今天开幕,新增拔河、乒乓球等项目”。说实话,第一反应是觉得有点“萌”,脑海里浮现出几个金属骨架在赛场上笨拙移动的画面,这更像是一场科…

2026/8/25 19:32:03 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →