10 points par GN⁺ 2025-05-23 | 1 commentaires | Partager sur WhatsApp
  • Un outil qui supprime les éléments inutiles d’une page web (commentaires, barre latérale, en-tête, pied de page, etc.) pour ne conserver que le contenu principal
  • Contrairement à Mozilla Readability, il fonctionne de manière plus flexible et prend en charge une standardisation HTML cohérente pour les formules, blocs de code, notes de bas de page, etc.
  • Développé pour Obsidian Web Clipper, avec pour objectif la compatibilité avec d’autres outils de conversion HTML-to-Markdown (comme Turndown)
  • Intègre des fonctions d’extraction de métadonnées variées, comme les styles mobiles et les données schema.org
  • Compatible à la fois avec Node.js et le navigateur, avec plusieurs bundles au choix selon l’usage

Ce qui différencie Defuddle de Readability

  • Un filtrage plus tolérant qui réduit la suppression d’éléments incertains
  • Un traitement cohérent des zones spéciales comme les notes de bas de page, les formules et le code
  • Prend en compte la feuille de style mobile de la page
  • Permet d’extraire des informations supplémentaires comme les métadonnées schema.org, les images, le favicon ou la date de publication

Composition des bundles

  • Bundle Core (defuddle) : adapté à une utilisation dans le navigateur, sans dépendance externe
  • Bundle Full (defuddle/full) : inclut des fonctions supplémentaires comme le parsing des formules
  • Bundle Node (defuddle/node) : optimisé pour l’environnement Node.js (JSDOM), avec prise en charge complète des formules et de la conversion Markdown

Structure de l’objet retourné

Defuddle retourne un objet contenant les informations suivantes

  • author : nom de l’auteur de l’article ou de la page
  • content : chaîne de contenu principal nettoyé
  • description : description résumée de l’article ou de la page
  • domain : nom de domaine du site
  • favicon : URL du favicon du site
  • image : URL de l’image principale
  • metaTags : informations sur les balises meta
  • parseTime : temps de traitement (en millisecondes)
  • published : informations de date de publication
  • site : nom du site
  • schemaOrgData : données extraites de schema.org
  • title : titre du contenu
  • wordCount : nombre de mots du contenu principal

Options

  • debug : active la journalisation de débogage
  • url : spécifie l’URL de la page à analyser
  • markdown : convertit le contenu principal en Markdown
  • separateMarkdown : retourne à la fois le HTML et le Markdown
  • removeExactSelectors : option de suppression des sélecteurs à correspondance exacte (publicités, boutons sociaux, etc.) (valeur par défaut : true)
  • removePartialSelectors : option de suppression des sélecteurs à correspondance partielle (publicités similaires, etc.) (valeur par défaut : true)

1 commentaires

 
GN⁺ 2025-05-23
Avis Hacker News
  • Je n’aime pas la façon dont l’éditeur wysiwyg que j’utilise convertit le markdown en HTML, donc je me dis qu’en créant moi-même une barre d’outils et un éditeur pour y intégrer cet outil, on pourrait obtenir de meilleurs résultats.

  • J’ai récemment étudié un sujet similaire, et je n’étais pas vraiment convaincu par la qualité des implémentations de Readability dans différentes langues. Readability.js était la meilleure, mais l’environnement Javascript ne convenait pas à mon projet. J’ai finalement choisi la bibliothèque Python Trafilatura pour extraire du contenu de très haute qualité, avec des métadonnées précises en plus. Comparer mon implémentation avec Trafilatura pourrait permettre d’identifier des pistes d’amélioration.

    • Si vous utilisez Go, il existe une version Readability pour Go ainsi qu’un port de Trafilatura que je maintiens. La version Go de Trafilatura offre des performances comparables à celles de la version Python. Liens de référence : go-shiori/go-readability, markusmobius/go-trafilatura
    • La documentation officielle de Trafilatura est disponible ici. À noter que Trafilatura signifie « extrusion » en italien. Le nom viendrait de la capacité des macaronis à bien retenir la sauce, avec en prime un aperçu intéressant de l’origine de termes liés aux pâtes. (Et ce n’est pas trifatura mais bien trafilatura.)
  • J’utilise Obsidian Clipper depuis son lancement, et j’apprécie tout particulièrement sa fonction d’extraction basée sur des profils par site. Même pour ceux qui n’utilisent pas Obsidian, la qualité d’extraction en markdown est l’une des plus fiables que j’aie vues jusqu’à présent.

    • Merci pour l’astuce.
  • À une époque où les sites web deviennent de plus en plus complexes et encombrés, je pense qu’un convertisseur markdown robuste, capable d’aider le lecteur à se concentrer sur le vrai contenu, est absolument nécessaire. Je suis ravi de voir arriver un projet qui comble le vide laissé par Readability, et je lui souhaite bonne chance.

  • J’ai découvert Defuddle en analysant le code source, impressionné par la qualité de conversion en markdown d’Obsidian Web Clipper. Je compte l’utiliser dans l’application de type read-it-later / knowledge-base que je développe, donc je voulais remercier l’auteur par avance.

  • Je me demande si Readability de Mozilla est vraiment à l’abandon. La dernière release date d’il y a 2 mois, et le mainteneur Gijs répond encore très activement aux issues.

    • Ce codebase laisse malgré tout beaucoup de place à l’amélioration. Je l’ai forké dans le cadre de mon travail pour corriger des bugs. Par exemple, il y a un bug qui fait que, sur des pages dans des langues comme le néerlandais où des virgules apparaissent entre les chiffres, toutes les informations de prix sont interprétées comme du texte important. J’ai voulu soumettre une PR, mais il fallait impérativement faire passer les tests, et ceux-ci échouaient sur la page que j’avais testée, ce qui a rendu le merge difficile de manière assez inefficace.
  • Présentation d’un projet similaire développé en PHP : markydown. Son avantage est la simplicité de l’auto-hébergement.

  • Exemple d’usage concret : Obsidian Web Clipper est très pratique pour convertir des conversations chatGPT en markdown, ou tout simplement pour les utiliser au format imprimable.

    • Certains clients, dont Kagi Assistant, proposent une fonction permettant d’enregistrer directement les conversations en markdown. Utiliser le web-clipper d’Obsidian est aussi une très bonne idée.
    • Pour ma part, je demande directement à chatGPT un résumé ou le contenu dont j’ai besoin sous forme de fichier markdown.
  • Question sur la raison pour laquelle, sur certains sites web, l’accès en mode lecture (par exemple le lecteur sur iPhone) affiche un écran blanc ou rend le texte illisible. Cela semble particulièrement fréquent sur les sites d’actualité. Est-ce intentionnel pour forcer l’affichage des publicités, et si oui, comment cela est-il mis en place ?

    • Dans de nombreux cas, surtout dans l’UE, au Royaume-Uni ou en Californie, le problème vient des bannières de confidentialité ou des notifications de cookies. Sur certains sites, ces bannières n’apparaissent que sous forme de modal, ce qui est généralement bien géré par le mode lecture, mais ailleurs elles passent par des redirections ou du rendu côté serveur qui masquent complètement le contenu. En mode lecture, il est conseillé de fermer d’abord les bannières concernées puis de réessayer.