Blogsatz: Auf Blogsuche mit dem Krabbler

web-crawlerIm Rahmen eines Praktikums habe ich die Aufgabe übernommen,  für das Blogsatz-Projekt einen Crawler zu entwickeln, welcher potentielle Blogkandidaten aufspürt. Hierzu sollte Bixo verwendet werden.

Was ist Bixo?

Bixo ist ein open source Toolkit, welches es ermöglicht, Webmining zu betreiben und Webseiten zu crawlen. Dieses Toolkit verwendet, wie auch der andere Teil von blogsatz, das Framework Cascading, damit das Ergebnis auch Cloud-tauglich ist.

Was macht einen Blogkandidaten aus?

Wir haben uns darauf verständigt, dass das Augenmerk zunächst auf .edu-Domains gelegt wird, da die Wahrscheinlichkeit, dass es sich bei Webseiten aus solchen Domains um wissenschaftliche Seiten handelt, höher ist als bei x-beliebigen Adressen.

Weiterhin werden vorerst nur Blogs berücksichtigt, die in der englischen Sprache verfasst wurden, da sich die spätere Bewertung auf englische Blogposts konzentriert.

Der Ablauf

In einer MySQL-Datenbank sind Seed-URLs (Start-URLs) hinterlegt, mit denen der Crawler beginnt. Ausgehend von diesen URLs hangelt sich der Crawler über die auf den Seiten enthaltenen Links auf weitere Seiten des Blogs. Links, die auf externe Seiten verweisen, werden zunächst nicht verfolgt, sondern werden als Seed-URLs in der Datenbank hinterlegt, so dass diese bei einem der nächsten Crawl-Durchläufe bearbeitet werden.

Auf jeder Seite wird eine Identifizierung der benutzen Sprache durchgeführt. Dies hat sich jedoch im Laufe der Entwicklung als nicht besonders einfach herausgestellt. Bixo bietet zwar durch Apache Tika eine Methode an, die die Sprache identifizieren soll, allerdings erhält man hiermit recht häufig keine sichere Aussage. Daher mussten weiter Methoden her. Die zweite Methode basiert auf der Buchstabenhäufigkeit auf der betreffenden Seite. Die auftauchenden Buchstaben werden gezählt und nach Häufigkeit sortiert zu einem String zusammengesetzt. Anschließend wird die Levenshtein-Distanz zu den Buchstabenhäufigkeits-Strings verschiedener Sprachen bestimmt. Für die Sprache Deutsch sieht dieser folgendermaßen aus: ENISRATDHULCGMOBWFKZPVJYXQ.

Hier wird nun die Sprache mit der geringsten Distanz als Ergebnis genommen. In den ersten Durchläufen hat sich gezeigt, dass die ermittelte Sprache bei einer Distanz < 10 meistens korrekt ist. Da die beiden Methoden jedoch weiterhin bei einigen Seiten keine sichere Ausgabe liefern konnten, wurde eine dritte Methode implementiert, die aus dem HTML-tag das ‘lang‘-Attribut extrahiert. Hierbei ist jedoch zu beachten, dass viele Webentwickler dieses Attribut erst gar nicht oder aber fehlerhaft setzen. So ist z.B. oft ‘lang=“en“’ zu finden, auch wenn die eigentliche Sprache der Seite Deutsch ist. Dies ist auch der Grund dafür, dass diese Methode nicht primär bzw. als einzige verwendet wird.

Flowchart - Erkennen der Sprache

Erkennen der Sprache

Neben der Erkennung der Sprache ist auch zusätzlich wichtig, zu erkennen, ob es sich bei der vorhandenen Webseite um einen Blog handelt. Hierbei haben wir uns zunächst auf die Erkennung von WordPress-Blogs beschränkt, da diese einfach durch das Vorkommen von ‘wp-content’ im head des HTML-Codes zu erkennen sind. Hierfür wird der Tika-Sax-Parser und der xPath-Ausdruck “/xhtml:html/xhtml:head/xhtml:link/@*” verwendet.

Die dritte Bedingung – dass es sich um einen Blog mit .edu-Domain handelt – wird durch einen simplen regulären Ausdruck an der URL geprüft:

http(s)?://(.+\.)+(edu).*

Aus den Ergebnissen ergibt sich nachfolgend des Attribut ‘candidate’, welches angibt, ob es sich bei der gecrawlten Seite um einen potentiellen Kandidaten handelt oder nicht. Diese Ergebnisse werden zusammen mit dem Inhalt der Webseite und dem Datum des Crawlens in eine weitere Tabelle ‘crawled’ geschrieben, welche später als Quelle für die weitere Verarbeitung dient.

Ausblick

Das Crawlen an sich wurde umgesetzt. Dies kann jedoch noch verbessert werden, indem die Analyse des HTML-Codes in verschiedene Cascading Pipes verteilt wird, wodurch in der Cloud eine höhere Geschwindigkeit erreicht werden kann. Weiterhin könnte implementiert werden, dass nicht nur WordPress-Blogs erkannt werden.

Für einen späteren produktiven Einsatz wäre natürlich auch noch wünschenswert, dass die Erkennung der Sprache weiter optimiert werden würde.

 

Comments are closed.