Frage

Natürlich eine HTML-Seite kann eine beliebige Anzahl von Python-Parser analysiert werden, aber ich bin überrascht, dass es scheint nicht alles öffentliches Parsing-Scripts zu seine sinnvollen Inhalt zu extrahieren (ohne Sidebars, Navigation, etc.) von einem HTML doc gegeben.

Ich vermute, es ist so etwas wie DIV und P Elemente zu sammeln und sie dann für einen Mindestbetrag von Textinhalt überprüft, aber ich bin sicher, dass eine solide Umsetzung viele Dinge umfassen würde, die ich nicht gedacht haben.

War es hilfreich?

Lösung

Versuchen Sie, die Schöne Suppe Bibliothek für Python. Es hat eine sehr einfache Methoden, um Informationen aus einer HTML-Datei zu extrahieren.

Der Versuch, allgemein Extrahieren von Daten aus Web-Seiten würden die Menschen benötigen, um ihre Seiten in einer ähnlichen Art und Weise zu schreiben ... aber es gibt eine fast unendliche Anzahl von Möglichkeiten, um eine Seite zu vermitteln, dass all conbinations identisch geschweige denn sieht man das vermitteln hat gleiche Informationen.

Gab es eine bestimmte Art von Informationen, die Sie versuchen, zu extrahieren oder zu einem anderen Ende Ziel?

Sie könnten versuchen, jeden Inhalt in ‚div‘ Extrahieren und ‚p‘ Marker und die relativen Größen aller Informationen auf der Seite zu vergleichen. Das Problem ist dann, dass die Menschen wahrscheinlich Gruppeninformationen in einer Sammlung von ‚divs und‘ p (oder zumindest sie tun, wenn sie gut ausgebildet html zu schreiben!).

Vielleicht, wenn Sie einen Baum gebildet, wie die Information in Beziehung steht (Knoten wäre die ‚p‘ oder ‚div oder was auch immer und jeder Knoten enthalten würde den zugehörigen Text) Sie irgendeine Art von Analyse tun könnten die kleinsten zu identifizieren‘ p 'oder ‚div‘, die encompases, was die Mehrheit der Informationen ..?

zu sein scheint

[EDIT] Vielleicht, wenn Sie es in die Baumstruktur zu bekommen, schlug ich vor, könnte man dann ein ähnliches Punktesystem, um Spam-Attentäter verwenden. Definieren Sie einige Regeln, die die Informationen zu klassifizieren versuchen. Einige Beispiele:

+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'

Wenn Sie eine viel niedrige Scoring-Regeln haben, die addieren, wenn Sie mehr relevent suchen Abschnitte finden, denke ich, dass in eine ziemlich leistungsfähige und robuste Technik entwickeln könnte.

[EDIT 2] auf die Lesbarkeit der Suche, so scheint es ziemlich genau das zu tun, was ich gerade vorgeschlagen! Vielleicht könnte es verbessert werden, um zu versuchen und zu verstehen, Tabellen besser?

Andere Tipps

Hier finden Sie aktuelle templatemaker: http://www.holovaty.com/writing/templatemaker/

Es ist von einem der Gründer von Django geschrieben. Grundsätzlich füttern Sie es ein paar Beispiel HTML-Dateien und es wird eine „Vorlage“ generieren, die Sie dann nur die Bits zu extrahieren, die unterschiedlich sind (was in der Regel ist der sinnvollen Inhalt).

Hier ist ein Beispiel aus der Google Code Seite :


# 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>'

Sie können verwenden, um die boilerpipe Webanwendung zu holen und zu extrahieren Inhalt im Fluge.

(Dies ist in Python nicht spezifisch, da Sie nur eine HTTP-GET-Anforderung zu einer Seite auf Google App Engine ausgeben müssen).

Cheers,

Christian

Was ist sinnvoll und was nicht, hängt es von der Semantik der Seite. Wenn die Semantik beschissen ist, wird Ihr Code nicht „erraten“, was sinnvoll ist. Ich benutze die Lesbarkeit, die Sie im Kommentar verknüpft, und ich sehe, dass auf vielen Seiten, die ich versuche, es zu lesen, kein Ergebnis liefern, nicht über einen anständiges Gespräch.

Wenn jemand den Inhalt in einer Tabelle setzt, sind Sie zum Scheitern verurteilt. Versuchen Sie die Lesbarkeit auf einem Forum erstellen Sie werden sehen, was ich meine.

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

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

  

Goose wird versuchen, die folgenden Informationen zu extrahieren:

     
      
  • Haupttext eines Artikels
  •   
  • Hauptbild des Artikels
  •   
  • Jede in Artikel eingebetteten Youtube / Vimeo-Filme
  •   
  • Meta Beschreibung
  •   
  • Meta-Tags
  •   
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top