De:Crawler
Der Crawler ist vom Prinzip her ganz simpel, man gibt eine Adresse (URL) ein bei der er starten soll, z.B. www.heise.de und dann lädt er diese herunter um zu sehen ob er in der angegebenen Seite Links zu anderen Webseiten findet. Wenn er weitere Links findet, dann folgt er diesen um dort das selbe Spiel von vorne zu beginnen (er sucht nach Links, denen er dann folgt), so gelangt er von einer Seite auf die nächste und speichert Seite für Seite in seinem Index (-> indexierung). Dieses Verfahren wenden im Grunde genommen alle Suchmaschinen an um ihrem Index mit Webseiten zu füllen.
Details der Vorgehensweise
Formal ausgedrückt baut ein Crawler den Verlinkungsgraphen, ausgehend von einem dedizierten (start-) Knoten des Graphen bis zu einer bestimmten Suchtiefe, die der maximalen Entfernung (= Anzahl der Kanten im Graphen in einer Folge) von allen anderen Knoten des Graphen entspricht, auf.
Dieser Graph, und somit auch der Crawler, sollte noch folgende Eigenschaften aufweisen:
- Der Crawler sollte robots.txt auswerten und befolgen
- Webseiten, die zirkulär verlinkt (= geschlossene Wege im Graphen) sind führen zu wiederholtem Crawlen, wenn kein doppel-check gemacht wird. Der Suchbaum muss daher solche geschlossene Wege ausschliessen. Hierbei tritt allerdings das Problem auf, das manche Knoten nicht-eindeutige Entfernungen vom Startknoten haben.
- Das Absuchen der Knoten im Graph muss teilweise simultan ablaufen, damit langsame Server nicht den Crawl-Prozess verzögern können (multi-threading des Crawlers). Hieraus ergibt sich folgende weitere Anforderung:
- Der Crawler muss load-queues, double-check queues, error-queues, retry-queues, storage-queues robot-prefetch-queues etc verwalten und synchronisieren, um das multi-threading zu ermöglichen
- Da der Crawler multi-threaded sein sollte, tritt das Problem auf das einzelne domains durch zu viele simultane crawl-requests überlastet werden können. Der Crawler muss also ein target-server load-balancing durchführen.
YaCy hat alle diese Eigenschaften.