Question

Bien sûr, une page HTML peut être analysée à l'aide de n'importe quel nombre de python analyseurs, mais je suis surpris qu'il ne semble pas être tout public l'analyse des scripts pour extraire le contenu (à l'exclusion des barres de navigation, la navigation, etc.) à partir d'une donnée HTML doc.

Je suppose que c'est quelque chose comme la collecte des DIV et des éléments P et puis de vérifier, pour un montant minimum de contenu de texte, mais je suis sûr d'une solide mise en œuvre devrait inclure beaucoup de choses que je n'ai pas pensé.

Était-ce utile?

La solution

Essayez bibliothèque Python. Il a des méthodes très simples pour extraire des informations à partir d'un fichier html.

Essayer de données d'extraire des pages Web serait génériquement besoin des gens d'écrire leurs pages d'une manière similaire ... mais il y a un nombre presque infini de façons de transmettre une page qui ressemble laisser identiques seul tous les conbinations vous pouvez transmettre la mêmes informations.

Y avait-il un type particulier d'information que vous essayez d'extraire ou d'un autre objectif final?

Vous pouvez essayer extraire tout le contenu des marqueurs « div » et « p » et de comparer les tailles relatives de toutes les informations sur la page. Le problème est alors que les gens probablement d'information du groupe dans les collections de « div et de » p de (ou du moins ils le font s'ils écrivent bien formé html!).

Peut-être que si vous formiez un arbre de la façon dont l'information est liée (nœuds seraient les « p » ou « div ou autre chose et chaque noeud contiendra le texte associé), vous pouvez faire une sorte d'analyse pour identifier le plus petit » p »ou « div » qui encompases ce qui semble être la majorité des informations ..?

[EDIT] Peut-être que si vous pouvez l'obtenir dans la structure de l'arbre que je suggère, vous pouvez alors utiliser un système de points similaire à l'assassin de spam. Définir des règles qui tentent de classer les informations. Voici quelques exemples:

+1 points for every 100 words
+1 points for every child element that has > 100 words
-1 points if the section name contains the word 'nav'
-2 points if the section name contains the word 'advert'

Si vous avez un bon nombre de règles à faible score qui ajoutent quand vous trouvez plusieurs sections à la recherche relevent, je pense que cela pourrait se transformer en une technique assez puissante et robuste.

[EDIT2] En regardant la lisibilité, il semble faire à peu près exactement ce que je viens de le suggérer! Peut-être qu'il pourrait être amélioré pour essayer de comprendre les tables mieux?

Autres conseils

Jetez un oeil à templatemaker: http://www.holovaty.com/writing/templatemaker/

Il est écrit par l'un des fondateurs de Django. Fondamentalement, vous nourrir quelques exemples de fichiers html et il va générer un « modèle » que vous pouvez ensuite utiliser pour extraire seulement les bits qui sont différents (ce qui est généralement le contenu significatif).

Voici un exemple de la google page de code :


# Import the Template class.
>>> from templatemaker import Template

# Create a Template instance.
>>> t = Template()

# Learn a Sample String.
>>> t.learn('<b>this and that</b>')

# Output the template so far, using the "!" character to mark holes.
# We've only learned a single string, so the template has no holes.
>>> t.as_text('!')
'<b>this and that</b>'

# Learn another string. The True return value means the template gained
# at least one hole.
>>> t.learn('<b>alex and sue</b>')
True

# Sure enough, the template now has some holes.
>>> t.as_text('!')
'<b>! and !</b>'

Vous pouvez utiliser le boilerpipe application Web pour chercher et extraire le contenu à la volée.

(Ce n'est pas spécifique à Python, comme il vous suffit d'émettre une requête HTTP GET à une page sur Google AppEngine).

Cheers,

Christian

Quel est significatif et ce n'est pas, cela dépend de la sémantique de la page. Si la sémantique est merdique, votre code ne sera pas « deviner » ce qui est significatif. J'utilise la lisibilité, qui vous a dans le commentaire, et je vois que sur de nombreuses pages que j'essaie de le lire ne fournit aucun résultat, ne parle pas d'un décent.

Si quelqu'un met le contenu d'une table, vous êtes condamné. Essayez la lisibilité sur un forum phpbb vous verrez ce que je veux dire.

Si vous voulez le faire, rendez-vous avec une expression rationnelle sur <p></p>, ou analyser les DOM.

Goose est seulement de la bibliothèque pour cette tâche.Pour citer leur README:

Goose vais essayer d'extraire les informations suivantes:

  • Le texte principal de l'article
  • L'image principale de l'article
  • Youtube/Vimeo films incorporé dans l'article
  • Méta Description
  • Meta tags
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top