Étant donné une page Web d'article d'actualité (de toute source d'actualités majeure telle que Times ou Bloomberg), je souhaite identifier le contenu de l'article principal sur cette page et supprimer les autres éléments divers tels que les publicités, les menus, les barres latérales, les commentaires des utilisateurs.
Quelle est une manière générique de faire cela qui fonctionnera sur la plupart des principaux sites d'information?
Quels sont les bons outils ou bibliothèques pour l'exploration de données? (de préférence python)
Il n'y a aucun moyen de faire cela qui fonctionne, mais une stratégie que vous pouvez utiliser est d'essayer de trouver l'élément avec le texte le plus visible à l'intérieur.
Il existe plusieurs façons de procéder, mais aucune ne fonctionnera toujours. Voici les deux plus simples:
Diffbot propose une API gratuite (10.000 urls) pour ce faire, je ne sais pas si cette approche est ce que vous recherchez, mais cela pourrait aider quelqu'un http://www.diffbot.com/
Il y a quelque temps, j'ai écrit un simple Python script juste pour cette tâche. Il utilise une heuristique pour regrouper les blocs de texte en fonction de leur profondeur dans le DOM. Le groupe avec le plus de texte est alors supposé être le contenu principal. Ce n'est pas parfait, mais fonctionne généralement bien pour les sites d'actualités, où l'article est généralement le plus grand regroupement de texte, même s'il est divisé en plusieurs balises div/p.
Vous utiliseriez le script comme: python webarticle2text.py <url>
Pour une solution en Java jetez un œil à https://code.google.com/p/boilerpipe/ :
La bibliothèque passe-partout fournit des algorithmes pour détecter et supprimer le "fouillis" excédentaire (passe-partout, modèles) autour du contenu textuel principal d'une page Web.
La bibliothèque fournit déjà des stratégies spécifiques pour les tâches courantes (par exemple: l'extraction d'articles de presse) et peut également être facilement étendue pour des paramètres de problème individuels.
Mais il y a aussi un wrapper python autour de ceci disponible ici:
Il peut être plus utile d'extraire les flux RSS (<link type="application/rss+xml" href="..."/>
) sur cette page et analysez les données du flux pour obtenir le contenu principal.
Une autre possibilité de séparer le contenu "réel" du bruit est de mesurer la densité HTML des parties d'une page HTML.
Vous aurez besoin d'un peu d'expérimentation avec les seuils pour extraire le contenu "réel", et je suppose que vous pourriez améliorer l'algorithme en appliquant des heuristiques pour spécifier les limites exactes du segment HTML après avoir identifié le contenu intéressant.
Mise à jour: Je viens de découvrir que l'URL ci-dessus ne fonctionne pas pour le moment; voici un lien alternatif vers une version en cache de archive.org.
Je n'essaierais pas de le supprimer de la page Web - trop de choses pourraient le gâcher - mais plutôt de voir quels sites Web publient des flux RSS. Par exemple, le fil RSS du Guardian contient la plupart du texte de ses principaux articles:
http://feeds.guardian.co.uk/theguardian/rss
Je ne sais pas si le Times (The London Times, pas NY) en a un parce qu'il est derrière un paywall. Bonne chance avec ça...