python-Methode zum Extrahieren von Inhalt (ohne Navigation) von einer HTML-Seite

8

Natürlich kann eine HTML-Seite mit einer beliebigen Anzahl von Python-Parsern geparst werden, aber ich bin überrascht, dass es offenbar keine öffentlichen Parsing-Skripte gibt, um aussagekräftigen Inhalt (ausgenommen Seitenleisten, Navigation, etc.) von einem zu extrahieren gegebenes HTML-Dokument

Ich vermute, dass es so etwas wie das Sammeln von DIV- und P-Elementen und deren Überprüfung auf ein Minimum an Textinhalt ist, aber ich bin mir sicher, dass eine solide Implementierung viele Dinge enthalten würde, an die ich nicht gedacht habe.

    
jamtoday 28.04.2009, 06:40
quelle

5 Antworten

5

Probieren Sie die Beautiful Soup Bibliothek für Python aus. Es hat sehr einfache Methoden, um Informationen aus einer HTML-Datei zu extrahieren.

Der Versuch, generisch Daten von Webseiten zu extrahieren, würde erfordern, dass die Leute ihre Seiten auf ähnliche Weise schreiben ... aber es gibt eine fast unendliche Anzahl von Möglichkeiten, um eine Seite, die identisch aussieht, ganz zu schweigen von all den Kombinationen, die Sie haben können, zu übermitteln gleiche Information.

Gab es eine bestimmte Art von Informationen, die Sie extrahieren wollten, oder ein anderes Endziel?

Sie könnten versuchen, alle Inhalte in 'div' und 'p' Markern zu extrahieren und die relativen Größen aller Informationen auf der Seite zu vergleichen. Das Problem ist dann, dass Leute wahrscheinlich Informationen in Sammlungen von "div's" und "p's" gruppieren (oder zumindest tun sie es, wenn sie gut formatierten html schreiben!).

Vielleicht könnten Sie, wenn Sie einen Baum bilden, wie die Information zusammenhängt (Knoten wäre das 'p' oder 'div oder was auch immer und jeder Knoten würde den zugehörigen Text enthalten), eine Art Analyse durchführen, um den kleinsten' p zu identifizieren 'oder' div ', die das einschließt, was die Mehrheit der Information zu sein scheint ..?

[EDIT] Vielleicht könntest du, wenn du es in die von mir vorgeschlagene Baumstruktur bringen kannst, ein ähnliches Punktesystem als Spam-Attentäter verwenden. Definieren Sie einige Regeln, die versuchen, die Informationen zu klassifizieren. Einige Beispiele:

%Vor%

Wenn Sie viele Regeln für niedrige Punktzahlen haben, die sich addieren, wenn Sie relevantere Abschnitte finden, könnte sich das zu einer ziemlich mächtigen und robusten Technik entwickeln.

[EDIT2] Wenn man die Lesbarkeit betrachtet, scheint es genau das zu tun, was ich gerade vorgeschlagen habe! Vielleicht könnte es verbessert werden, um Tabellen besser zu verstehen?

    
Jon Cage 28.04.2009, 08:28
quelle
4

Schauen Sie sich templatemaker an: Ссылка

Es wurde von einem der Gründer von Django geschrieben. Im Grunde füttert man es mit ein paar Beispiel-HTML-Dateien und es wird eine "Vorlage" erzeugt, mit der man dann nur die Bits extrahieren kann, die unterschiedlich sind (was normalerweise der sinnvolle Inhalt ist).

Hier ist ein Beispiel aus der Google-Codepage :

%Vor%     
John Montgomery 28.04.2009 12:43
quelle
3

Sie können die Web-Anwendung "kesselleitung" verwenden, um Inhalte schnell zu holen und zu extrahieren.

(Dies ist nicht spezifisch für Python, da Sie nur eine HTTP GET-Anfrage an eine Seite in Google AppEngine senden müssen).

Prost,

Christ

    
Christian Kohlschütter 21.11.2010 18:59
quelle
1

Was sinnvoll ist und was nicht, hängt von der Semantik der Seite ab. Wenn die Semantik beschissen ist, wird Ihr Code nicht "raten", was sinnvoll ist. Ich benutze Lesbarkeit, die Sie im Kommentar verlinkt haben, und ich sehe, dass auf vielen Seiten, die ich versuche zu lesen, es kein Ergebnis liefert, nicht von einem anständigen.

Wenn jemand den Inhalt in eine Tabelle legt, bist du verloren. Versuchen Sie die Lesbarkeit in einem phpbb Forum, Sie werden sehen, was ich meine.

Wenn Sie es tun wollen, gehen Sie mit einem Regexp auf <p></p> oder parsen Sie das DOM.

    
zalew 28.04.2009 06:52
quelle
0

Goose ist nur die Bibliothek für diese Aufgabe. Um ihre README zu zitieren:

  

Goose wird versuchen, die folgenden Informationen zu extrahieren:

     
  • Haupttext eines Artikels
  •   
  • Hauptbild des Artikels
  •   
  • Alle im Artikel
  • eingebetteten Youtube / Vimeo Filme   
  • Meta Beschreibung
  •   
  • Meta-Tags
  •   
    
Michał Czapliński 22.07.2014 23:39
quelle