Question

Ce n’est pas vraiment une question de programmation, mais plutôt algorithmique.

Le problème: trouver le " contenu " section d'une page HTML.

Par " contenu " Je veux dire le dom qui contient le contenu de la page tel que vu par les humains, sans le bruit, simplement le & "Contenu réel de la page &"; Je sais que le problème n'est pas bien défini, mais continuons ... Par exemple, sur les sites de blogues, cela est généralement facile. Lorsque vous naviguez vers un message spécifique, vous avez généralement des barres d’outils en haut de la page, peut-être des éléments de navigation sur le LHS, puis le div qui contient le contenu. Essayer de comprendre cela à partir du HTML peut être délicat. Heureusement, cependant, la plupart des blogs ont des flux RSS et dans le flux de cet article spécifique, vous trouverez un & Lt; description & Gt; section (ou < content: encoded >) et c’est exactement ce que vous voulez. Donc, pour affiner la définition du contenu, il s’agit de la chose réelle sur la page qui contient la partie intéressante, en supprimant toutes les annonces, les éléments de navigation, etc. Il est donc relativement facile de trouver du contenu à partir de blogs, à condition qu’ils aient le RSS. Il en va de même pour les autres sites contribuant au RSS.

Qu'en est-il des sites de nouvelles? Dans de nombreux cas, les sites d'informations ont un flux RSS, mais pas toujours. Comment trouve-t-on du contenu sur des sites de news alors? Qu'en est-il des sites plus généraux? De nombreuses pages Web (bien sûr, pas toutes) comportent une section de contenu et d'autres sections. Pouvez-vous penser à un bon algorithme pour trouver les sections qui sont & "Intéressant" & "; v / s le moins intéressant? Peut-être que les sections qui changent de celles qui ne changent pas?

J'espère que j'ai été clair ... Merci!

Était-ce utile?

La solution

Je n'ai pas fait cela, mais ce serait mon approche générale.

Comme vous l’indiquez, le manque de structure dans les éléments de contenu visibles (c’est-à-dire qu’il n’a pas de balises telles que header, navigation, ads) en HTML signifie qu’il est plus difficile de rechercher la clé partie de la page. Mon approche serait d’abord de supprimer des éléments distincts que vous avez décidés ne sont pas intéressants. Une liste possible d’exclusions pourrait être:

  • méta-éléments tels que !doctype, head (considérez le title comme une donnée distincte)
  • éléments dynamiques tels que object, embed, applet, script
  • images (selon que vous souhaitez les conserver ou non), img
  • éléments de formulaire, par exemple form, input, textarea, label, legend, select, option, div

Un second passage pourrait alors commencer à exclure les noms ul ou footer id / class, courants, ainsi que toutes les balises qu’ils contiennent, tels que:

  • meta, nav, topnav
  • sidebar, ad, adu, h1
  • h2, p, td (et autres noms couramment utilisés pour les annonces)

Nous espérons que cela supprimera une quantité importante de décoration de la page. Le prochain défi consiste à essayer d’identifier le contenu principal à partir de ce qui reste, et je suggérerais au départ de supposer que l’auteur du site utilise correctement le code HTML sémantique, et donc principalement les balises div id="content", id="maincontent" et le <= > balise de paragraphe.

Pour identifier le contenu, je rechercherais n'importe quelle balise d'en-tête qui serait ensuite suivie d'une balise de paragraphe. (Cela peut être <=> pour votre contenu principal; la balise <=> est souvent (et peut-être même incorrectement) utilisée pour afficher le nom ou le logo du site, mais nous espérons que cela aura été éliminé en excluant les parties d'en-tête de la page.) Chaque paragraphe suivant doit être ajouté au contenu actuel jusqu'à ce que vous atteigniez une pause, qui pourrait être la fin de l'élément <=> ou <=>, ou bien un élément d'en-tête du même niveau que vous avez commencé.

Comme il se peut que plusieurs éléments de contenu aient été rassemblés sur la page (peut-être le contenu principal plus le texte de présentation de l'auteur), vous devez tester et affiner l'étape de prise de décision qui permet de choisir le plus probable. candidat. Ce sera souvent simplement le plus grand, à la fois en termes de longueur et de nombre d'éléments de paragraphe utilisés.

Au fur et à mesure que vous rassemblez plus d'exemples de contenu, vous pouvez ajouter des mesures de soutien à votre algorithme. Vous remarquerez peut-être que de nombreuses pages utilisent <=> ou <=>. Il peut également être utile de conserver les éléments de contenu secondaires que vous avez détectés. Ainsi, si certains sites ont un moyen curieux de structurer le contenu, une fois que vous avez ajouté un capteur dans votre algorithme, il peut être ré-exécuté sur cette cible. contenu du site.

Autres conseils

Un site bien structuré aura ses zones communes réutilisant le même code, par exemple. navigation, en-tête et etc.

Lorsque vous souhaitez analyser une page cible, essayez de parcourir quelques autres pages appartenant au même domaine / sous-domaine et recherchez les éléments communs à toutes les pages. Ce sont les bruits dont vous voulez vous débarrasser.

Ensuite, vous pouvez regarder ce qui reste pour voir si des bruits se sont glissés. Lorsque vous avez collecté une quantité raisonnable de ces données, essayez d’y trouver un motif. Affinez votre logique et répétez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top