Content Extraction

Nach dem großartigen Webscraping-Tutorial wollte ich einfach mal Inhalte von Seiten ab-scrapen. Nicht einfach irgendwelche Inhalte, sondern die sinnigen Texte der Websites.

Die Ermittlung des sinnigen Contents sollte nicht bei jeder Seite spezifisch auf ein div mit id="content" oder ähnliches gehen.

Was ich suche ist ein genereller Mechanismus, um innerhalb von HTML-Seiten sinnigen Content von Footer, Navigation oder diesen nervigen Teasertexten zu erkennen.

Herausgekommen ist bei meinen Tests eine Heuristik, die soweit ganz gut zu funktionieren scheint. Natürlich gibt es immer wieder Ausnahmen, aber generell erscheint es mir gut genug, dass ich den Mechanismus hier zum Ausprobieren vorstelle.

Folgende Annahmen habe ich hierbei getroffen:

  • der gesamte Seiteninhalt kann in einigermaßen gute Stücke zerhackt werden (z.B. bei div- oder table-Tags)
  • sinnvoller Content ist immer ein zusammenhängender Text von einer gewissen Länge (Ausschluß von Teasertexten), der höchstens durch einzelne Formatierungstags bestückt ist.
  • Text die mit verhältnismäßig zu vielen HTML-Tags durchsetzt (z.B. div, a) gehören in die Kategorie Navigation, Teaser, …

Im Script habe ich das Verhältnis der Textlänge zu der Anzahl an HTML-Tags ermittelt (wobei ich vorher einige harmlose Tags entferne, die gerne im Content vorkommen können, u.a. br).

Wenn das ermittelte Verhältnis für den jeweiligen Block überschritten wird, wird der Teil der Seite verworfen.

Probiert’s einfach mal selbst aus. Einfach eine Url eingeben und ihr bekommt den sinnvollen Text angezeigt. Zumindest nach Meinung des Scripts :-D

Sehr amüsant, was da so manchmal erscheint.

Viel Spaß. Falls Ihr Seiten testet bei denen absolut nur Quatsch rauskommt, hinterlasst doch einfach einen Kommentar. Und noch eine Bitte. Das hier ist nur als “sinnfreier” Spaß gedacht. Das Ganze soll nicht dazu dienen, um andere Webseiten zu belästigen (mehr als 10 Abfragen sind daher strikt untersagt!).

Danke.

Im Übrigen gibt sich der Content-Extraktor als Useragent: “Vogel-Nest – ContentExtractor-Playground” aus. Einen bekannten Useragent vorzugaukeln (wie z.B. den Useragent des IE oder Firefox) finde ich unfair (s. Webscraping), weil man dadurch der Zielseite jegliche Möglichkeit nimmt derartige – möglicherweise ungewünschte – Aktionen zu unterbinden.

Daher können z.B. Seiten von Wikipedia mit diesem Tool nicht abgerufen werden, da Wikipedia offensichtlich nur Standard-Browser bzw. von “Menschen bediente” Browser zulässt.

  1. (*)
 

cforms contact form by delicious:days

Teilen oder mailen:
  • Facebook
  • Twitter
  • Digg
  • del.icio.us
  • MisterWong.DE
  • email
  • PDF

8 Antworten to “Content Extraction”

  1. Martin Ewald sagt:

    Also, bei mir hat’s üüüberhaupt nicht funktioniert. Nach ab-scrapen meiner Seite erschien nur Unsinn … :-D

    sehr cooles Tool.

  2. Gabi sagt:

    haben will! :–)

  3. Raj Dsouza sagt:

    Nice extraction method … well I am still learning xpath queries. which i havent sunk in yet.

    the content is written in german which i cannot understand… is there a way I can get the code ??

  4. Stefan sagt:

    Hi Raj,

    maybe you can try some of the translation-utilities, like http://babelfish.yahoo.com/, http://translate.google.com/translate_t or others.

    Sorry, that I won’t publish the code, but it is easy to do by yourself (and by the way: no xpath is used). Simply split the html in chunks (e.g. at table- or div-tags) and afterwards build the ratio of tags to “text” and play around with a “sense full” ratio-limit.

    This is by no means something reproducible or in any way a safe method to extract all content from a website. Because of several assumptions it may produce senseless content (like navigation-texts) or delete sense full content (e.g. when content is heavily formatted).

  5. Halil sagt:

    es ist interesant, Vor 2 monate habe ich so was eine content leser gesucht. Danke

  6. Stefan sagt:

    Hallo Halil,

    du kannst mich gerne per Mail kontaktieren.

  7. Florian sagt:

    Echt cool!

  8. MicMac sagt:

    Sehr gutes Tool, klasse, hat geholfen, gut gemacht!

Eine Antwort hinterlassen

(erforderlich)

(erforderlich)