AhCrawler

Spider und Suchmaschine in PHP.

Einleitung

Seit so einiger Zeit habe ich einen selbstgeschriebenen Crawler im Einsatz. Dieser durchsucht meine Webseite und baut eine Datenbank für einen Suchindex auf. Auslöser, einen eigenen Crawler zu schreiben war die Einstellung "meiner" bisherigen Suchengine "Sphider".

Im Crawler lassen sich mehrere Webseiten definieren, die unabhängig voneinander analysiert werden können.

Crawler

Der Crawler wird per Kommandozeile gesteuert. Er berücksichtigt Ausschlussergeln der robots.txt, Meta-Anweisungen für no-index und no-follow wie auch rel=nofollow in den Links.

Suche

Auf der Webseite befindet sich die Suche. Man kann mit UND Verknüpfung auch nach mehreren Begriffen suchen und die Suche auch auf Unterverzeichnisse einschränken.

Ressourcen

Als Ressourcen werden von einer Webseite erfasst

  • alle Links (A Href, Links im Html-Header, Frames + iFrames, Imagemaps)
  • alle Bilder
  • alle CSS-Dateien
  • alle Javascripts

Für jede Ressource wird der Http-Status ermittelt wie auch die Abhängigkeiten (welche Seite verlinkt was) und in der Datenbank abgelegt. Im Backend lassen sich so Reports zu Fehlern und Hinweisen generieren.

Backend

Es gibt eine passwortgeschützte Weboberfläche. In dieser lassen sich für alle Profile einsehen:

  • der Stand des Suchindex und die Suchbegriffe
  • Webseiten-Analyse mit fehlerhaften Links und Warnungen
  • Browsing und Filter durch alle Ressourcen

Status

Die Software ist im Betastatus. Sie ist in meiner Webseite eingebaut. Oben rechts ist interne Suche dazu. Es stehen Ergänzungen und Dokumentationen aus, damit meine Sammlung von Klassen zu einem einfach installierbaren Produkt werden. Der Quellcode ist auf Github.

Bitte etwas Geduld ;-)

 

... der Spider

  • verwendet eine Non-blocking Multicurl Klasse
  • leitet auf einen Content-Analyzer pro MIME Type weiter (zunächst text/html)
  • bleibt auf einer Domain
  • berücksichtigt nofollow in der robots.txt, die robots Angabe im Html Header und das rel=nofollow in html-Links
  • beachtet strikt include-Regeln der Konfiguration (Liste von Regex)
  • schliesst per exclude-Regeln weitere URLs aus (ebenfalls Regex)

... der Suchindex

  • ist eine PDO Datenbank (getestet: Sqlite und Mysql)
  • Datenbank-Zugriff ist durch eine Klasse gekapselt (jene unterstützt MySQL, MariaDB, MSSQL, Sybase, PostgreSQL, Oracle)
  • wird aktualisiert durch
    • einen Crawler (dieser aktualisiert die gesamte Site)
    • eine Update-Funktion für eine einzelne URL

... die Suche

  • verknüpft mehrere Worte mit AND
  • gewichtet ein Suchergebnis nach
    • Vorkommen in der URL, Schlüsselwörtern, Beschreibung und Content und
    • Art des Treffers: exaktes Wort, Treffer ab Wortanfang, Treffer irgendwo im Wort

... die Konfiguration

  • ist eine JSON Datei
  • mehrere Domains / Suchindexe als einzelne Profile verwaltbar

... das Backend

  • ist mehrsprachig ausgelegt (initial deutsch + englisch)
  • Anzeige des Status des Suchindex: neueste/ älteste Seiten im Index
  • Zugriff auf eingegebene Suchbegriffe inkl. Anzahl derer Treffer + Wiederholung derselben Suche im aktuellen Index
  • Statistik-Funktionen: Top N der Suchbegriffe letzte 7/ 30/ 90/ 365 Tage
  • Löschen von einzelnen/ allen Seiten im Suchindex

 

Screenshots:

Analyse deiner Webseite

Derzeit wird das Tool ausgebaut. Es entstand ein zusätzliches Modul, das alle verlinkten Elemente einer Webseite analysiert: Javascripts, CSS, Bilder, externe Links. Für alle Ressourcen werden Verlinkungen (Verwendungen) und Status erfasst.

Im Backend entsteht ein Analyse-Werkzeug, das deine Webseite durchleuchtet, von A-Z auseinandernimmt und Abhängigkeiten aufzeigen soll. Gibt es einen ungültigen 404 Link, können alle Seiten aufgezeigt werden, die dasselbe fehlerhafte Element enthalten.