Suchfunktion im Eigenbau – Der Spider

Die Einrichtung von OpenWebSpider (auf einem Linuxserver) ist zwar nicht weiter kompliziert, allerdings ist die Dokumentation des Projekts etwas verstreut. Grund genug, die Einrichtung in diesem Beitrag etwas näher zu beleuchten.

Nachdem OWS (in der aktuellen Version 0.7) gemäß der Anleitung hochgeladen und die zugehörigen Datenbanken konfiguriert worden sind, könnte man sich nun an das Kompilieren der Anwendung machen. Zuvor sind gegebenenfalls jedoch noch einige Änderungen und Ergänzungen vorzunehmen. Wer beispielsweise nicht mit dem user-agent OpenWebSpider unterwegs sein möchte, kann diesen in der Datei htmlfnct.h an seine Wünsche anpassen. Zudem sollte man sich noch die aktuelle Version des RegexFilters-Moduls zulegen (auf dessen tieferen Sinn ich später noch eingehen werde) und diese als regexFilter.c in /modules/regexFilter/ unterhalb des Installationsverzeichnisses abspeichern. Für das RegexFilter-Modul wird auch noch eine Konfigurationsdatei namens mod_regex.conf benötigt, die im Installationsverzeichnis abgelegt wird. Nun kann OWS nebst zugehörigem Modul mit make kompiliert werden.

Nun geht es an die Einrichtung des eben schon erwähnten RegexFilter-Moduls, mit dessen Hilfe es möglich ist, Dokumente von der Indexierung anhand ihres Hostnamens, ihres Pfades, des HTML-Codes oder dem nach entfernen des HTML-Codes noch vorhandenen Textes auszuschließen. Entsprechende Reguläre Ausdrücke können entweder allgemein oder nur für bestimmte Hosts gültig sein.

Folgende mod_regex.conf würde beispielsweise dazu führen, dass auf leadbait.de nur die Startseite und die Artikel, nicht aber Kategorien, Archive oder sonstige Seiten indexiert werden.

[www.leadbait.de]
hostname=
page=^(/([0-9]{2})([.*]{1})([0-9]{2})([.*]{1})([0-9]{4})[.*]|/$)
html=
text=
#EOF

Auf diese Weise lässt sich der Index der Suche prima auf die wesentlichen Seiten beschränken. Über das Modul könnte man auch veranlassen, dass OWS eine noindex Anweisung in den Metatags respektiert – was in der Grundeinstellung im Gegensatz zu den Regeln aus der robots.txt nicht der Fall ist. Hierzu müsste man eine passende RegularExpression entwickeln, die sich auf den gesamten HTML-Code bezieht. Ebenfalls keine Beachtung findet das Attribut rel=”nofollow” in Links. Auch dies lässt sich jedoch mit etwas Aufwand nachrüsten, da OWS eine Schnittstelle für weitere eigene Module beinhaltet.
OWS lässt sich komplett über die Kommandozeile bedienen, wobei es zumindest unter Windows auch eine grafische Oberfläche gibt. Eine Übersicht der möglichen Argumente findet sich im Handbuch zu OpenWebSpider.

./openwebspider -i http://www.leadbait.de -s -e -z -r 0 -t 20 -d 200 -u -f modules/regexFilter/regexFilter.so

Dieser Aufruf beinhaltet beispielsweise folgende Funktionen:

  • -i gibt dem Spider den Ausgangspunkt des Indexiervorgangs, hier http://www.leadbait.de, vor.
  • -s versetz OWS in den sogenannten “Single host mode”, der dafür sorgt, dass der Spider den unter -i vorgegebenen Host nicht verlässt.
  • -e weist OWS an, Links auf Hosts zu ignorieren, die von dem unter -i vorgegebenen Host abweichen.
  • -z sorgt dafür, dass OpenWebSpider den kompletten HTML-Code der indexierten(!) Seiten mittels zlib komprimiert und cached. Ein Aufruf mit -x würde ein unkomprimiertes Caching auslösen.
  • -r gibt OWS vor, welche Beziehungen zwischen Seiten und / oder Hosts gespeichert werden sollen. Mit -r 0 wird hierauf komplett verzichtet, -r 1 speichert die Beziehung zwischen den einzelnen Host, -r 2 sogar zwischen einzelnen Dokumenten. Die letzten beiden Optionen sind allerdings eher dann interessant, wenn mehr als nur die eigene Domain indexiert werden soll.
  • -t bestimmt die Anzahl der gleichzeitig laufenden Threads, voreingestellt ist hier 20.
  • -d legt den Zeitabstand zwischen zwei Anfragen in Millisekunden fest und gilt nur, sofern in der robots.txt keine abweichende Crawl-Delay-Time eingestellt ist.
  • -u weißt den Spider an, nur neue Seiten zu indexieren.
  • -f sorgt dafür, dass das anschließend genannte Modul (hier das RegexFilter-Modul) geladen wird.

Neben den in dem Beispielaufruf verwendeten Anweisungen gibt es noch ein paar weitere, nicht ganz uninteressante Optionen:

  • -m begrenzt die Anzahl der zu indexierenden Ebenen. Ein -m 2 beispielsweise würde dafür sorgen, dass der Einstiegspunkt, sowie die davon abgehenden Links indexiert werden.
  • -l bietet die Möglichkeit die Anzahl der zu indexierenden Seiten zu beschränken, ein -l 500 lässt OWS nach 500 indexierten Seiten seine Arbeit einstellen.
  • -T versetzt OWS in den sogenannten “Testing Mode”. Hierbei crawlt er zwar entsprechend der anderen Vorgaben, indexiert jedoch keine Seiten. Ähnlich wirkt sich auch -n aus, hier werden nur Beziehungen gespeichert, aber keine Inhalte indexiert.

Nicht schlecht zu wissen ist auch, dass sich ein einmal begonnenes Crawling mit STRG+C beenden lässt. Nach Abschluss des Crawlings befinden sich die Daten, die den Vorgaben des Aufrufs und der gegebenenfalls verwendeten Filter entsprechen, nun in der zugehörigen Datenbank. Diese kann nun beispielsweise mithilfe des beim Download mitgelieferten PHP-Frontends – auf das ich vermutlich in einem zweiten Beitrag näher eingehen werde – durchsucht werden.

weitere Nachrichten zu diesem Thema

6 Kommentare bisher »

  1. Uwe sagt

    am 17. Februar 2008 @ 19:39

    Hi Philipp,
    feiner Artikel zum Einrichten des Open Web Spiders. Die Frage die sich mir da auftut – mit meiner eingeschränkten Phantasie – welche Anwendungsgebiete damit erschlossen werden können. Irgendwas mit Seo bestimmt :-) . Kann man damit das komplette deutsche Web spidern und eine eigene Backlinkanzeige generieren oder was macht man mit dem Teil?

  2. Philipp R. sagt

    am 18. Februar 2008 @ 01:42

    Hallo Uwe,

    Sinn dieses Artikels hier war in erster Linie eine Alternative zu Hosted Search Lösungen für die seiteninterne Suche aufzuzeigen. Sicherlich hat ein eigener Spider auch eine Menge andere Vorzüge – wobei die Aufgabe das deutsche Web zu indexieren schon eher ambitioniert sein dürfte ;)
    Ich hatte beispielsweise vor kurzem das Glück auf die Schnelle aus dem Cache meines OWS ein statisches Backup einspielen zu können, weil es auf einem Server ein Problem mit php gab und keine dynamischen Seiten mehr erzeugt werden konnten.
    Über Anwendungsmöglichkeiten, die direkt im Bereich SEO liegen, hab ich mir bisher noch nicht wirklich Gedanken gemacht – spontan fällt mir dazu auch nichts weltbewegendes ein (abgesehen davon, dass man ganz gut sehen kann, wie ein Bot durch die eigenen Seiten geht…)

  3. Rainer sagt

    am 14. April 2008 @ 00:51

    Kurze Frage: In welchen Ordner muss ich unter Linux installieren und wie binde ich es dann in eine Webseite ein? Gibt es hierzu vielleicht ne gute Anleitung (evtl sogar Deutsch) habe mir die Englische durgelesen, bin aber nicht darauf gestoßen wie ich die Suchseite aufrufen und einbinden kann.

    Vielen Dank im Voraus

  4. Philipp R. sagt

    am 14. April 2008 @ 01:17

    Hallo Rainer, wohin Du OWS unter Linux installierst, dürfte theoretisch egal sein – letztendlich ist das eher eine Frage der Übersichtlichkeit.
    Das Download-Archiv enthält einen Ordner “PHP”, in dem sich die entsprechenden Dateien befinden. Diese kannst du entweder direkt in die Website einbauen, oder wie gewünscht anpassen (Änderung der Suche auf die DB, Änderungen der Ausgabe, etc…). Diese .php Dateien sollten natürlich so hochgeladen werden, dass man sie über eine Domain ansprechend kann.

  5. Rainer sagt

    am 14. April 2008 @ 12:07

    Vielen Dank für die Hilfe. Ich war nach dem ich geschireben habe auf dem Weg ins Bett, daher schreib ich erst jetzt!
    Das erscheint mir logisch, nur schade das es nirgendwo steht.

    Ich poste das Ergebnis wenn es interessiert!
    Gruß Rainer

  6. Rainer sagt

    am 14. April 2008 @ 23:53

    In der CFG die Dabei ist sind nur 2 MySQL Server angegeben, aber laut Docu und MySQL Script sind es drei. Ich habe den dritten jetzt einfach dazu geschrieben.
    Ich hoffe das stimmt?

    Gruß Rainer

Komentar RSS · TrackBack URI

Hinterlasse einen Kommentar

Name: (erforderlich)

eMail: (erforderlich)

Website:

Kommentar: