Extraction de contenu principal dans les pages web

Lorsqu’on navigue sur des sites web, tout le contenu affiché n’est pas toujours pertinent pour un moteur de recherche ou un utilisateur. Certains blocs peuvent être considérés comme le contenu principal tandis que d’autres blocs sont appelés boilerplate. C’est cette tâche de différenciation (ou plutôt de classification) entre le contenu et le boilerplate que nous allons aborder.

À quoi ça sert d’extraire le contenu principal ?

Voici quelque raisons :

  • Le contenu principal est utilisé pour indexer les sites selon le contenu pertinent pour l’utilisateur.
  • Les lecteurs audio pour les malvoyants ou la conversion en “mode lecture” de page web sont basés sur cette extraction de contenu.
  • Le contenu principal peut être utilisé pour la création de divers corpus de données, par conséquent le boilerplate serait un “bruit” pour notre IA à entraîner.

Quelle est la différence entre contenu principal et boilerplate ?

La définition peut varier. En général on peut dire que dans le cadre de l’indexation d’une page par un moteur de recherche :

« On peut supposer que le contenu principal correspond soit au texte central d’un article de la page (s’il existe), soit à tout ce qui n’appartient pas au modèle récurrent du site. On pourrait ainsi définir le contenu principal comme la partie de la page que la plupart des visiteurs s’attendraient à voir s’ils arrivait d’ailleurs, par exemple depuis un moteur de recherche. » (Janek Bevendorff et al.)

Très bien, cette définition n’est pas universelle mais on peut déjà considérer les headers, footers, menu de navigation, mention de copyright, publicités… comme faisant partie du boilerplate.

Et les commentaires des utilisateurs alors ? C’est du contenu principal ?

Et bien pour certaines structures, ça depend du genre de la page ou de ce que l’utilisateur recherche. D’après la définition, les commentaires ne sont pas récurrents donc font partie du contenu principal. Mais :

  • Est-ce que les commentaires de blogs ou de journaux font partie de l’intention de recherche principal de l’utilisateur ? Pas vraiment.
  • Est-ce que je souhaite voir les commentaires d’un produits ou bien d’un site de réservation ? C’est possible.

Comment extraire le contenu principal d’une page web ?

Il existe 3 approches principales dont, les 2 premières suivent une même continuité quand la dernière tente une stratégie totalement différente.

L’approche Heuristique

L’approche heuristique est basée sur l’écriture de règles et dépend de stratégies que l’humain à définit manuellement en étudiant les structures de pages web. Ces stratégies se basent sur des caractéristique du texte dont les plus utilisées sont :

  • La densité de texte : combien de mot sont écrit par lignes dans le bloc analysé.
  • La densité de liens : combien de liens sont écrit par lignes dans le bloc analysé.

De nombreuses autres caractéristiques existent en fonction de l’algorithme employés comme la taille moyenne des phrases, le ratio de lettres majuscules, le nombre de virgules par bloc… globalement tous type de comptage sur texte.

Lorsqu’un bloc satisfait suffisamment de condition écrite manuellement, il est considéré comme faisant partie du contenu principal.

Parmi les extracteurs heuristiques connus et performants on peut citer Trafilatura et Readability.

L’approche Machine Learning

Les approches de machine learning sont beaucoup plus variées structurellement que les approches heuristiques mais se base en général sur les mêmes caractéristiques et parfois les mêmes stratégies.

Les règles sont automatiquement apprises par le modèle sous la supervision d’un ensemble de données annoté. Les modèles Dragnet et Boilerpipe sont basés sur cette différence.

Certains modèles vont plus loin en intégrant une analyse sémantique des blocs et de leur relation avec les blocs adjacents. C’est le cas par exemple de Boilernet qui utilise des LSTM (Long Short-Term Memory) en complément des règles apprises.

L’approche Visuelle

Pour des utilisations spécifique, les extracteurs issus des approches précédentes peuvent être très fortement limité. La langue peut donner des performances totalement différentes en fonction des caractéristiques analysées.

Mais les règles utilisées ne sont pas liées à la langue ?

Implicitement si. Je pense notamment a des écritures où des mots ou des syllabes peuvent être représentés en 1 seul caractère, les écritures où les lettres majuscules et minuscules n’existent pas. Des écritures où la virgule n’est pas utilisée. Compter tous ceci devient donc impossible et biaisera forcément les modèles utilisant ces caractéristiques pour déterminer le contenu principal. Ainsi les sites chinois, japonais, coréen, russe et nombre d’autres ne sont pas toujours adapté même avec les extracteurs les plus performants. Ce problème de compatibilité est d’autant plus évident si on analyse la sémantique du texte.

L’approche visuelle est donc basée sur 2 principes :

  • Les éléments principaux sont généralement situés au centre de l’écran à l’inverse des menus, publicités et autres éléments “bruits”.
  • Les humains peuvent détecter le contenu principal sans avoir à le lire, ce qui signifie que la structure de la page et son rendu visuel peut être plus efficace que l’analyse textuelle.

Cette méthode est agnostique de la langue et se base sur l’analyse du rendu de la page et de l’arbre DOM pour extraire les blocs centraux.

Heuristique vs Machine Learning, quelle est la meilleure approche ?

Dans l’article : “An Empirical Comparison of Web Content Extraction Algorithms”, les auteurs ont eu pour ambition la comparaison de 14 extracteurs de contenus principaux (+5 outils de conversion html→texte) évalués sur 8 datasets publiques. Pour des raisons de paradigme totalement différents, l’approche visuelle est difficilement comparable aux deux premières approches et ne fait pas partie de cette étude. Qu’en concluent-ils ?

Prenons seulement les algorithmes en haut du panier : Trafilatura, Readability et Boilerpipe. Trafilatura et Readability, basés sur l’approche heuristique, sont moins adaptables aux nouvelles structures du fait de leurs règles manuelles mais sont globalement plus rapides, moins coûteuses en puissance de calcul et également plus efficaces que les approches de machine learning, comme Boilerpipe.

Pourquoi des stratégies automatique et plus complexes sont moins bonnes face à des règles écrites à la main ?

Alors elles ne sont pas toujours les moins bonnes. On remarque par exemple que Boilerpipe, ayant été entraîné sur un des datasets du benchmark, surpasse tous les autres précisément sur celui-ci. L’approche machine learning dépend de sa structure, des stratégies sauvegardées mais aussi des données d’entraînement. On peut se questionner sur la qualité de ceux-ci et de leurs impact sur l’efficacité des extracteurs basé sur le machine learning. La langue anglaise est surreprésenté, la taille des datasets sont jugés trop petit et le genre des pages est presque exclusivement constituées d’articles presses et d’articles blogs.

À ce jour les extracteurs à privilégier sur des langues latines sont donc les extracteurs heuristiques. Ils seront très efficaces pour l’extraction de contenus d’articles blogs/presses mais ne sont ni agnostique de la langue, ni du genre.

Envie de tester chez soi ?

Sortez votre plus bel interpréteur python et tentons d’extraire une page web parfaitement choisie au hasard 👀 via ces quelque lignes de code avec l’un des modèles performants de l’approche heuristique :

Python

Références

FAQ

Quelles sont les techniques courantes d’extraction de données des pages web ?

Les approches heuristiques, machine learning et visuelles, bien que la première soit sans doute la plus facile à utiliser, sont largement utilisées dans le domaine du web pour extraire des informations à partir de pages web.

Quels outils de scraping recommandez-vous pour extraire des informations d’une page web ?

En une phrase : Comme vu un peu plus haut, le Trafilatura est très facile à déployer et est très performant en vitesse et en résultat. Readability est un bon outil aussi.

Comment extraire les données brutes d’une page web en utilisant Python ?

S’il s’agit de tout le texte, BeautifulSoup et Html-Text sont des outils amplement suffisant.

Quelle est la différence entre le scraping de pages web en ligne et le scraping en local ?

Si vous avez déjà un corpus local de pages à extraire, les librairies mentionnées permettent également de prendre en entrée des fichiers locaux. La méthodologie reste inchangée.

Quelles sont les étapes à suivre pour extraire des données d’une page web en utilisant un scraper ?

La première étape serait de calculer le rendu de la page au cas où du contenu est ajouté par un script. Téléchargez ensuite ce rendu avant d’extraire le contenu désiré via les bibliothèque de scraping dont vous avez besoin.

Comment identifier et extraire des éléments spécifiques d’une page web en HTML ?

Si vous savez exactement ce que vous voulez scraper, vous pouvez utiliser la bibliothèque BeautifulSoup pour créer vos propres règles d’extraction.

Comment différencier les balises div et class pour extraire des données d’une page web en HTML ?

BeautifulSoup (toujours sur Python) permet d’analyser le contenu extrait basé sur les balises, le nom des classes ou bien le texte lui-même.

Quels sont les avantages et les inconvénients de l’extraction automatique de données sur les sites web ?

L’avantage du scraping web est sans doute son gain de temps et sa flexibilité puisqu’il est en général utilisé sur de grands corpus de données. L’inconvénient est que le site ciblé peut utiliser des scripts pour ajouter du contenu, ce qui nécessite l’utilisation d’autres outils pour le charger avant l’extraction. Le format de sortie peut parfois être chaotique et n’est pas suffisamment robuste pour toutes les langues ni tous les formats de pages web.

Comment optimiser le processus d’extraction de données pour obtenir des informations précises à partir des pages web ?

L’optimisation des extracteurs dépend du genre, de la langue, de la taille des pages et de leur complexité. Plus les données à analyser sont homogènes sur tous ces points, plus il serait facile d’en apprendre les règles via une approche machine learning. Il sera par contre difficile de généraliser sur des pages radicalement différentes.