Suchmaschine selber programmieren

In diesem Artikel zeige ich euch, wie ihr selber eine kleine Suchmaschine programmiert. Suchmaschine ist vielleicht etwas übertrieben. Tatsächlich geht es um einen Webcrawler, aber dieser liefert uns alle benötigten Daten für eine Suchmaschine. Einsatzgebiet solcher kleinen Suchmaschinen sind beispielsweise Webseiten die dadurch relativ schnell und einfach durchsucht werden können. Man kann einen Index erstellen oder im einfachsten Fall eine Sitemap aufbauen.

Suchmaschine selber programmieren

Was benötigen alle Suchmaschinen dringender als Menschen Luft zum Atmen? Richtig: Daten. Ohne diesen könnte keine kein Suchergebnis zurückgeliefert werden. Die Frage ist nur: Woher? Auch hier ist die Antwort einfach: aus dem Internet.

Suchmaschinen wie Google nutzen so genannte Webcrawler. Das sind einfache Computerprogramme die von Link zu Link im Internet herum navigieren und dabei die Daten der Webseiten (deren HTML Code) lesen und speichern. Gute Webcrawler bzw. gute Suchmaschinen speichern diese Daten natürlich in einer intelligenten Art und Weise, so dass man schnell zu einem Schlüsselwort alle wichtigen Links findet. Für unser kleines Beispiel verzichten wir mal darauf und speichern uns nur die Links einer HTML Seite.

Mein PHP Webcrawler

Für einen simplen Webcrawler brauchen wir folgende Dinge:

  • eine Datenbank in der wir unsere Ergebnisse speichern
  • eine Funktion, die uns zu einer URL den HTML Code liefert
  • viel Zeit…

Download

Dieses Codebeispiel ist bereits der Kern des Webcrawlers. Die Funktion find_all_links liefert in einem Array alle Links der übergebenen URL, oder ein leeres Array, falls keine gefunden wurden. Es werden hier 2 wichtige Funktionen verwendet:

  1. file_get_contents
    Diese Funktion liefert den Inhalt einer Datei als String. Das tolle an dieser Funktion ist, dass man hier auch URLs übergeben kann.
  2. preg_match_all
    Mit dieser Funktion kann ein String gegenüber eines Regulären Ausdrucks (kurz Regex) getestet werden. Nähere Informationen zu Regulären Ausdrücken kann man im Internet finden. In diesem Fall definieren wir einen Ausdruck, der alle <a href> Tags des HTML Codes findet. Die Ergebnisse werden uns im 3. Parameter zurückgegeben.

Nachdem wir nun die Links bekommen haben, müssen wir sie natürlich auch irgendwo speichern. Zu diesem Zweck erstellen wir eine MySQL Datenbank und erzeugen uns eine einfache Tabelle:

Download

Jetzt erweitern wir noch unseren Webcrawler um eine Datenbankanbindung. Danach werden alle Links brav in der Tabelle gespeichert.

Download

Die Funktion links_to_db kümmert sich darum, dass unsere Links auch in der Datenbank landen. Außerdem wird hier noch bei jedem Link geprüft, ob er bereits in der Datenbank existiert. Das ist nicht unbedingt nötig, da in unserem Fall die Funktion find_all_links ja bereits doppelte Links verhindert.

Das wars soweit. Unser einfacher Webcrawler kann nun alle Links einer HTML Seite erkennen und speichern. Tatsächlich ist das aber erst der erste Schritt. Unser Webcrawler müsste nun alle gefundenen Links wieder wie mit dem Startlink abarbeiten, danach alle dieser Seite und so weiter. Im Idealfall startet der Webcrawler auf irgend einer beliebigen Webseite, läuft danach endlos weiter und liefert uns so lange Daten, biss unsere Datenbank voll ist!

Was fehlt zu Suchmaschine?

Wie bereits oben erwähnt genügt es nicht nur Links von Seiten zu speichern. Suchmaschinen bringen Links, Domains und Seiten in einen Kontext. Dabei ist vor allem der Text der Seite ausschlaggebend. Jedoch gibt es noch mehr. Zum Beispiel Metainformationen die der Seitenbesucher gar nicht zu sehen bekommt. Oder auch die so genannten Keywords, durch diese man erst die Seite findet. Wer mehr darüber wissen möchte, der sollte sich zum Thema SEO Optimierung einlesen. In den letzten Wochen habe ich so sehr viel dabei gelernt, warum manche Seiten eher gefunden werden als andere.

Alternativen

Wie immer gibt es im Internet zahlreiche Bibliotheken und Projekte die sich mit genau diesem Thema beschäftigen. Eine sehr gute Bibliothek heißt Caterpillar. Obwohl ich sie selber noch nie benutzt habe hat sie mir doch zumindest von der Funktionsweise beeinflusst.

Fazit

Dank PHP und einer MySQL Datenbank ist es sehr einfach einen eigenen Webcrawler zu programmieren. Diesen kann man benutzen um ihn auf die eigenen Webseiten los zu lassen oder fremde Homepages zu Indexieren. Mit der nötigen Optimierung, genügend Speicherplatz und genug Systemressourcen kann man damit auch beginnen das große Internet zu durchsuchen. Man muss sich nur bewusst sein, dass die Indexierung von 14 Milliarden Webseiten sehr viel Speicherplatz benötigt. Und der Webcrawler wird dafür sicher Jahre benötigen!

(Visited 4.947 times, 9 visits today)

Das könnte auch interessant sein...

13 Antworten

  1. Maximilian sagt:

    Cooles Tutorial!

  2. soeppel kan sagt:

    hi, wie kann ich den Quellcode ausführen?

  3. Tobi sagt:

    Hallo, danke für das Tutorial. Wenn ich das richtig verstehe, wird hier nur die Website developer-blog.net durchgesucht richtig? Wie kann ich mehrere aber nur bestimmte Seiten durchsuchen lassen ? z.B. ich will nur 5 bestimmte große Webseiten durchsuchen und indexen mehr nicht.

    • Ganz einfach, du musst das Skript ändern. Erstelle einfach ein Array $url mit deinen 5 Domains und baue eine Schleife ein, die das Array durchgeht. Die Ausgabe mit print_r würde ich am besten in eine Datei mit dem Domainnamen als Dateiname schreiben. Und schon hast du 5 Sitemaps!

  4. mirko sagt:

    Hallo habe da auch mal eine frage und würde mich über eine Antwort freuen.
    Ich habe ein Projekt bei dem ich einfach nicht aus dem Start rauskomme und suche einen Programmierer der sich gerne daran beteiligen will mit freiwilliger arbeit.
    😉
    Dabei sollte ich sagen das es nicht so schwer ist aber Google in den Schatten stellen wird.
    ;.)
    Da bin ich mir sicher.

  5. Stephan sagt:

    Hallo,

    was mir nicht ganz klar ist: Ich würde gerne sinnvoll suchen, und nicht nur von irgendeiner URL loslegen, sprich: Ich will z.B. alle Vertreter eine Berufsgruppe in einer Stadt (oder allen Städen) Deutschlands haben.
    Also so wie wenn ich Google dazu einsetzen würde, um z.B.
    Rechtsanwalt Hamburg
    Rechtsanwalt Hannover
    Rechtsanwalt Münster

    usw. aufzurufen, und dann die Ergebnisse durchsuchen. Geht so was? Wenn ja, wie?

  6. Felix Micke sagt:

    Hallo,
    mir ist da was noch nicht ganz klar. Muss ich jetzt also nur den letzten Teil in mein Script einbauen, und auf meiner index.php mit dem action-befehl auf diese .php datei verweisen?
    Und dann nur noch eine Tabelle mit den Daten hier „CREATE TABLE links (
    link varchar(255) NOT NULL,
    id int(10) unsigned NOT NULL auto_increment,
    PRIMARY KEY (id),
    UNIQUE KEY link (link)
    ) ENGINE=MyISAM CHARSET=utf8″
    erstellen, oder muss ich diese Datei hier auch irgendwo im Script einbauen?

  7. Matt sagt:

    Hallo,
    wenn ich das Script auf meinen Webserver (aktuelle Version 5.2.4.) lade, mit der entsprechenden Datenbank verknüpft, wird dieses immer wieder ausgeführt (zu dem Zeitpunkt, zu dem ich es hochlade)? Oder muss man es manuell „starten“?
    Kurzum: Wie funktioniert Start und Stop des Scripts?
    Danke übrigens für die Mühe das online zu stellen!

    • Werner Ziegelwanger sagt:

      es gibt zwei Möglichkeiten, wie man PHP Skripte automatisch laufen lassen kann. Die beste ist, indem man einen Cronjob durch Crontab definiert. Das sollte eigentlich jeder Hoster unterstützen. Die zweite aber viel schlechtere Variante ist das Skript bei jedem Seitenaufruf (zB index.php) einzubinden. Klappt zwar, macht aber jeden Seitenaufruf langsamer…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.