📄 Defuddle — Get the main content of any page as Markdown

Fuente: GitHub — kepano/defuddle
Autor: Steph Ango (kepano)
Tipo: README del repositorio

Resumen

Defuddle extrae el contenido principal de una página web (o HTML) y lo devuelve como HTML o Markdown limpio, quitando el “clutter” (comentarios, sidebars, headers, footers, elementos no esenciales) y dejando solo el contenido primario. Fue creado como motor del Obsidian Web Clipper, pero corre en cualquier entorno (browser, Node.js, CLI). Su nombre quiere decir “desfudar”: quitar elementos innecesarios de una web para que sea legible.

Takeaways clave

  1. Alternativa a Mozilla Readability con diferencias: es más permisivo (quita menos elementos dudosos), salida consistente para footnotes/math/code, usa los estilos móviles de la página para adivinar elementos innecesarios, y extrae más metadata (incluidos datos schema.org).
  2. Tres bundles: defuddle (core, browser, sin dependencias), defuddle/full (añade parsing de math y conversión a Markdown), defuddle/node (Node, acepta cualquier DOM: linkedom, JSDOM, happy-dom; incluye math + Markdown).
  3. CLI completa (npx defuddle parse ...): acepta fichero, URL o stdin; flags --markdown/-m, --json/-j, --frontmatter/-f, --property, --output, --lang, --user-agent (útil para sitios que dan 403 al UA por defecto).
  4. Estandariza HTML para procesamiento posterior: quita el primer H1/H2 si coincide con el título, convierte H1→H2, limpia números de línea y highlight en code blocks, unifica footnotes, convierte MathJax/KaTeX a MathML, y estandariza callouts (GitHub alerts, Obsidian callouts, Bootstrap alerts) a blockquotes con data-callout (en Markdown → callouts estilo Obsidian > [!info]).
  5. Metadata rich: author, content, description, domain, favicon, image, language, metaTags, parseTime, published, site, schemaOrgData, title, wordCount, debug.
  6. Fallback a servicios de terceros en parseAsync() cuando la página no tiene contenido usable (SPAs renderizadas en cliente, p. ej. FxTwitter API para X/Twitter); se desactiva con useAsync: false.
  7. Debug: da contentSelector, lista de removals (con razones) y errores; permite desactivar pasos (removeLowScoring, removeHiddenElements, removeSmallImages) o forzar un selector.

Nota práctico

La skill Defuddle de este mismo repo wiki (defuddle.md en raw) es una skill Hermes que envuelve esta librería: defuddle parse URL --md --frontmatter para sacar contenido limpio en Markdown. Encaja en la categoría Coste del concepto [[hermes-agent-skills]] (modo lector antes de leer = menos tokens de input).