
剪藏文章总混进广告导航Defuddle 免费把网页正文提取成干净 Markdown【免费下载链接】defuddleGet the main content of any page as Markdown.项目地址: https://gitcode.com/gh_mirrors/de/defuddle把网页正文搬进笔记软件评论区、侧边栏、订阅按钮却跟着一起进来Defuddle 干的就是网页正文提取这件事找到主内容清掉杂项转成干净的 Markdown 或 HTML。它替你解决哪几件事你想把一篇博客存进笔记库直接 CtrlC 却把相关文章和分享按钮全带了进来。Defuddle 用打分算法挑出得分最高的正文区块广告、导航、评论区按名单清掉你得到的是能直接落库的 Markdown。手上有一份论文或博客 URL 列表要批量归档。逐条喂给它的命令行输出正文外加标题、作者、发布日期等元数据你得到一摞格式统一的 .md 文件不用再手写解析。你在搭内容管道需要稳定的正文和字段喂给下游。该工具返回title、author、published、wordCount、schema.org 数据等完整字段你不用为每个站点单独写特判。最快跑起来一条 npx 命令# 无需安装直接跑正文转 Markdown 后存到文件 npx defuddle parse https://example.com/article --markdown --output article.md不想碰终端也可以把它当库引入浏览器里new Defuddle(document).parse()Node.js 里用defuddle/node入口搭配 linkedom 或 JSDOM核心 / full / node 三个 bundle 按场景选。三个核心能力1. 正文定位靠打分而不是选择器猜它给每个候选区块打分文本密度、链接密度、语义标签甚至参考页面移动端视口下的样式得分最高的成为正文而且拿不准的宁可少删。const result new Defuddle(document, { debug: true }).parse(); result.debug.contentSelector // 最终选中的正文选择器对你意味着换一批网站不用改代码提取错了也能看到它到底选了哪一块。2. 清理有清单删了什么可追溯除了打分删低分块它还按名单删除广告、社交分享按钮、CSS 隐藏元素和小图标、跟踪像素移除逻辑集中在 src/removals/ 目录。result.debug.removals // 每块被删内容的原因如 score: -20、display:none对你意味着删多了删少了都能对账不是黑盒 3. 转 Markdown 前先统一格式代码块去行号但保留语言标记KaTeX / MathJax 公式转成标准 MathML各种脚注写法和 callout 提示框也归一成统一格式规则在 src/elements/。precode>import { parseHTML } from linkedom; import { Defuddle } from defuddle/node; const url https://example.com/article; const html await fetch(url).then((r) r.text()); const { document } parseHTML(html); // markdown 输出 Markdown出问题时看 debug 里的选择器和删除记录 const result await Defuddle(document, url, { markdown: true, debug: true }); console.log(result.title, result.author, result.published); console.log(result.content); // 干净的正文 Markdown终端里等价的一条命令是npx defuddle parse $url --frontmatter -o out.md--frontmatter会把标题、作者、来源写成 YAML 头部。配置速查表库模式常用项选项类型默认值说明markdownbooleanfalse把content转成 Markdown 输出contentSelectorstring-手动指定正文选择器跳过自动定位standardizebooleantrue标准化脚注、代码块、公式等元素removeSmallImagesbooleantrue移除图标、跟踪像素等小图useAsyncbooleantrue允许异步提取器回源抓取给 SPA 页面兜底debugbooleanfalse返回正文选择器、删除记录等调试信息踩坑 进阶群里老手的几条某些站点直接 403默认 UA 被拒是常态--user-agent传个真实浏览器 UA 基本就通了。页面是客户端渲染HTML 里根本没正文默认开启的useAsync会让站点提取器去第三方接口兜底Reddit、YouTube 这类都有专门处理见 src/extractors/纯离线环境就关掉它别傻等外网。感觉删多了或删少了拿管道开关逐个排查removeLowScoring: false跳过打分删除removeHiddenElements: false保留 CSS 隐藏块——有些博客的 sidenote 就是用display:none装的不动它正文反而不完整。contentSelector配了却没生效选择器匹配不到元素时会静默回退到自动定位开着 debug 看debug.contentSelector和debug.errors就知道走没走通。Node 里 import 就报错defuddle/node要求package.json里写type: modulelinkedom 和 JSDOM 两种 DOM 实现都能接。Defuddle 的定位其实很窄把网页正文提取成干净的 Markdown或 HTML少删、稳输出别的它不管。tests/fixtures目录里有一百多个真实页面用例和预期输出遇到拿不准的版式翻一翻就知道它对这类布局的处理思路。【免费下载链接】defuddleGet the main content of any page as Markdown.项目地址: https://gitcode.com/gh_mirrors/de/defuddle创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考