Kann ich eine Suchmaschine wie google selbst erstellen?

7 Antworten

Also, das funktioniert.
Du müsstest unglaublich viele "Roboter"- pc's programmieren (Sogenannte Webcrawler) die dann Das Internet nach Seiten und deren Inhalte durchsuchen. Dann brauchst du noch genügend Server die Diese Daten speichern und diese dann für die Internetseite grafisch wieder herausgeben.

Alles in allem, wenn du eine erfolgreiche grosse Suchmaschiene haben willst dann musst du sehr viel in Hardware investieren. Willst du das nur für eine Seite machen, z.B. in deine eigene Website integrieren, so hat Google extra ein Plugin das man kostenlos auf seiner Seite platzieren kann. Es gibt auch andere Hersteller die sowas haben... das wäre eine viel smartere Lösung.

Ja, das geht, und ist jetzt nicht soooo unendlich kompliziert, erfordert aber viel Wissen auf vielen Gebieten, und du musst viele Kleinigkeiten berücksichtigen. Zumindest, wenn du grob die Funktionalität von Googles Websuche kopieren willst, und nicht vor hast, jede einzelne Unterseite einer jeden Website nahezu in Echtzeit zu crawlen.

Alles aufzulisten würde hier den Rahmen sprengen, und die benötigte Hardware hängt stark davon ab, was genau alles im Index landen soll.

Ich habe mal etwas ähnliches gemacht, und hatte alles auf einem alten Samsung-Laptop mit Dual-Core 32-Bit Pentium zu laufen. Damit habe ich über eine 16000er DSL Leitung etwas über eine Stunde gebraucht, um (fast) alle Websites des gesamten Deutschen Internets mit durchschnittlich 5 Unterseiten zu indizieren.

Ich hatte im Schnitt ca. 10000 Crawling-Prozesse parallel laufen, wobei der Download einer Webseite in HTML-Form ca. eine Sekunde gedauert hat.

Es gibt an die 15 Mio. Websites, die eine DE-Domain besitzen, und von denen habe ich anfangs mithilfe eines Wörterbuches und später über Links etwas über 11 Mio. Gefunden.

Der allergrößte Teil davon ist aber Müll: "Sedo-Parking", "Hier entsteht demnächst Blablabla", "Buy this domain", usw.

Man erkennt meist schon auf der Startseite, um welchen Typ Website es sich handelt, und außerdem habe ich noch eine Liste von IP-Domain-Paaren geführt, und dabei festgestellt, dass dieser ganze Domain-Reservierungs-Müll teilweise 10000 Domains pro Server und IP ausliefert, also habe ich entsprechende IPs dann gar nicht mehr untersucht, wenn eine gewisse Schwelle überschritten wurde, die unrealistisch hoch für Shared-Hoster ist.

Der etwas schwierigere Teil dabei war, dass ich zwischen zwei Anfragen pro Domain oder Server immer mindestens 30 bis 90 Sekunden warten wollte, es sei denn, in der "robots.txt" stand ein anderer Wert drin. Diese Koordination der vielen Prozesse war nicht leicht.

Außerdem darf man dabei auf gar keinen Fall einen fertigen HTML-Parser verwenden, da gefühlt jede 100ste Website so dermaßen gegen jeden Standard verstößt, dass man dabei schon mal eine Exception um die Ohren geworfen bekommt. Außerdem interessiert man sich als "Suchmaschinenbetreiber" für Details einer Webseite, die Standard-Parser ignorieren.

Das gleiche gilt für CSS und sogar JavaScript! Und allein schon daran sitzt man ein Weilchen! :)

Allein der Teil, der eine deutsche Website mit ISO-8859-1 Kodierung erkennt, obwohl als Kodierung eindeutig "UTF-8" angegeben wurde, war auch nicht ganz trivial.

Das erste, was du lernen musst, wenn du einen Webcrawler baust ist:

a) Webdesigner und Serveradmins sind irre

b) Es gibt keinen Standard, an den du dich halten kannst

c) Alle Daten, die vom Server kommen, dienen nur dazu, deinen Crawler zu verwirren

d) Webdesigner und Serveradmins sind irre

Außerdem stößt man hin und wieder (bei 10000 parallelen Verbindungen also alle paar Sekunden) auf Honeypots, die überprüfen, ob man sich wirklich an die Regeln hält. Also beachte auch JEDEN FALL die "robots.txt"!

Naja, wie auch immer ... das Thema ist zu komplex, also höre ich jetzt hier auf. Als Programmiersprachen, die sich dafür in geringem Umfang eignen würde ich Python oder Java empfehlen. Was sich überhaupt GAR nicht eignet ist - dank der völligen Abstinenz von Parallelität und IPC - das bei Kindern beliebte PHP. (Damit kann man keine vernünftigen Crawler schreiben, höchstens Pippifax!)

Die erste Version hatte ich noch mit Python als Proof-Of-Concept geschrieben, aber bin danach auf C und reine Linux-Syscalls umgeschwenkt. Der Performance-Schub ist exorbitant enormst! Vor allem bei so vielen Tausend parallelen Prozessen. Packet-Loss war in der C-Version deutlich geringer, als bei Python.

Mein Limit lag bei C bei ziemlich genau 10000, bei Python hingegen bei ca. 8000.

Also ganz ehrlich: Zumindest die reine Websuche von Google sollte sich von einem einzelnen Entwickler mit genügend Erfahrung binnen kürzester Zeit von Grund auf kopieren lassen. Das hätte dann zwar nicht die tollen Suchalgos, die Google so geheim hält, aber sind wir mal ehrlich: Google liefert auch sehr oft wirklich schwachsinnige Ergebnisse.

Meiner Meinung ist an Googles Vormachtstellung weniger eine geheimnisvolle Aura, als viel mehr die Unfähigkeit der anderen Schuld. Naja gut, Marketing spielt natürlich auch eine entscheidende Rolle. Und das ist für einen Multimilliardenkonzern natürlich leichter, als für eine 3-Mann-Klitsche.

PS: Das "Internet" klingt so unglaublich groß, ist es aber nicht. Die aller wenigsten Websites sind so groß wie GF, Facebook, usw. Da gibt es tatsächlich nur sehr sehr sehr wenige von. Die allermeisten Websites sind verhältnismäßig winzig, und die schafft man tatsächlich alle binnen einem einzigen Tag in den Index aufzunehmen. Viele Leute unterschätzen Parallelität, und das, wofür man mehr als 30 Jahre bei einem einzigen Prozess braucht, schafft man mit 10000 an einem einzigen Tag!

Außerdem kann man davon ausgehen, dass so eine Maschine von Google deutlich leistungsfähiger ist, und wesentlich dickere Bandbreite zur Verfügung hat, als mein oller alter Laptop an meinem lahmen DSL-Anschluss. Wie gesagt, wenn ich es schaffe, binnen einer Stunde mehrere Millionen Sites damit zu indizieren, wieviel schafft dann Google erst mit richtiger Hardware?

Ich denke, wenn man sich wirklich Mühe gibt, kann man mit relativ wenigen guten Rechnern (fünf bis zwanzig) schon verdammt viel reißen. Mann muss ja nicht alles in Echtzeit machen, und wenn der Crawler alle paar Wochen anstatt alle paar Minuten vorbei kommt, kann man immer noch sehr gute Ergebnisse liefern. Hat Google ja früher selbst auch so gemacht! :)

Auf jeden Fall ist ein parallel arbeitender Crawler, Indizierungsdienst, User-Interface-Server, usw. eine schöne Übung, bei der man sehr viel lernen wird! Allerdings ist auch viel Grundwissen nötig! Bitte nicht vergessen!

Trotzdem viel Spaß! :)

Es ist natürlich theoretisch möglich. Aber der Aufwand ist enorm - insbesondere wenn man sieht wie weit es nach oben skalieren kann.

Fangen wir mal im kleinen an. Du hast eine Textdatei und willst darin was suchen. Gut...erstmal einfach. Jetzt kommt eine andere Datei (HTML/PDF/DOC/...) - macht die Sache schon komplizierter - aber noch machbar.

Nun aber: Du willst eine Ordnerstruktur durchsuchen. Schonmal die Windowssuche benutzt? Das kann ewig dauern und die Ergebnisse sind nicht besonders durchschaubar. Da muss man indizieren also schon (plump gesagt) im Hintergrund relevante Metadaten sammeln (und auch sinnvoll abspeichern) damit die schnell verfügbar sind. Das alleine ist schon eine Aufgabenstellung die ich mir nicht zutrauen würde wirklich gut umsetzen zu können (und ich bin nebenbei von meinen Fähigkeiten sehr überzeugt). Also da ist schon sehr viel Algorithmenmagie notwendig.

Du brauchst Schlüsselworte um die Suche zu präzisieren. Zugegeben, das ist eine der einfacheren Aufgaben. Praktisch trotzdem ein riesen Aufwand.

Was google noch kann...Ähnlichkeiten erkennen...nun vllt nicht etwas was man Anfangs haben muss - aber erwähnenswert.

Nun aber der Coup de grâce: Du beschränkst das nicht auf deinen PC, nicht auf ein lokales Netzwerk, sondern es soll das WWW umschließen. Und während alles zuvor mehr oder weniger auf deine Fähigkeiten und Zeit beschränkt ist (wobei ich überzeugt bin, dass sich das mit einem Menschenleben nicht erreichen lässt) - bist du hier auch Rechenpower angewiesen. Gehen wir einen Schritt hoch: indizieren. Das heißt regelmäßig alle Seiten abfragen die es gibt und die Daten abspeichern...viel Spass.

Ich gebe zu: Ein interessantes Gedankenexperiment. Und durchaus auch eine interessante Projektidee eine lokale Dateisuche zu implementieren - aber darüber hinaus für eine Einzelperson absolut unrealistisch....

Es müsste gehen ist aber bestimmt mit vielllll arbeit verbunden aber ich weiss nicht wie das geht aber guck doch mal auf einer Website wo man seine eigene Website machen kann vllt findest du da was. ;)

Prinzipiell ja, praktisch nein