Webcrawler in PhP Programmieren?

thehacker

Anhänger der Apachen
Hallo,
ich möchte eine Suchmaschine erstellen :D.
Das Grundlegende habe ich schon also die Suchmaschine, sie funktioniert auch aber es ist doof das man alles per "Hand" eintragen muss, des wegen muss ein Webcrawler.


Er soll auf PHP laufen und in einer MySQL Datenbank die date speichern also ein Link + die Meta Tags.

Die Fragen:
1.Ist das wegen dem Datenschutz Legal also das wenn z.b. ich auf einen Link klicke der bot auch auf den Link geht und von da an Alle links auf der seite folg diese dan wieder speichert und das ganze dan wieder?
2. Wie fange ich mit der Programmierung an?
3. Was muss die Tabele in MySQL beinhalten zur Zeit:
Id(des eintrags)
Title (wird mit Link verlinkt)
Beschreibung
Keywords
und Link
4. Wie sähe die Rechnung aus? Also eine webseite die 20 Links hatt wird gespeichert dan wird der bot auf die 20 Links gehen die Speichern und dan wieder ca. 20 Links angeben? 5.Wäre das so rein Theoretisch mach bar?
6.Muss der Server einen Hohen Traffic aushalten
7. Was wäre das für ein Programmier aufwand?
8 Wie hatt Google angefangen?


Vielen dank schon mal und gute Nacht :D
 
Öhm, ich sach ma: Respekt für den Versuch. Vor allem weil Google ein Backend hat, davon träumst du nur...

Zum Thema: Ein Webcrawler macht zunächst mal das gleiche wie ein Browser, erlädt die Seite, analysisiert sie, holt sich Links raus, um dann damit weiter zu machen. Man könnte ([1.] obs legal ist, soll ein Anwalt entscheiden, ich wäre vorsichtig...) also einen [2.] HTTP-Client in PHP programmieren (oder nimmt sich eine bereits existierende Klasse/Codebasis). HTTPS sollte man auch nicht außen vor lassen.

[3.] Wie man das persistiert ist dann so eine Sache. Man kann ja mit dem Schema anfangen, was du selbst vorgelegt hast und dann suksessive erweitern, was noch benötigt wird. Warum versuchst du es nicht in einer anderen DB? PostgreSQL soll was die FULLTEXT-Suche angeht, recht gut sein. MySQL kann IMHO da nicht gegen anstinken.

[4.] Eine komplette Seite wegzuspeichern halte ich für übereifrig. Zunächst nach Keywords in den Meta-Tags suchen. Dann Schlüsselworte aus dem Text separieren (+5 davor und danach). Einen Algorithmus dafür findest du sicher über Google ;-)

[5.] klar

[6.] Kommt drauf an, wenn du z.B. GZIP einbaust, könnte sich das rechnen, vor allem bei regulärem Text. Oder meinst du den Traffic, der verbraucht wird, wenn man deine Suchmaschine verwenden will? Frag Google, was die im Monat an Traffic haben. Ich tippe so auf 100-200 Terabyte (einfach aus dem Bauch raus).

[7.] Keine Ahnung, ich tippe für die einfachste Variante so 10-15 Stunden all-incl. Docu ist nicht zu unterschätzen.

[8.] Vermutlich genauso. Nur mit ein paar Servern mehr... Vor allem denk ich, werden sie, weil sie Studenten waren (wenn ich richtig informiert bin) schon professionelle Software wie bspw. OracleDB eingesetzt haben.
 
Suchmaschine ist ein dehnbarer Begriff. Abhängig davon was Du suchen lässt, wird auch die benötigte Performance sein. Aber wenn Du schon google nennst, naja, dann viel Erfolg.

Infos zu google - 1996 unter dem Namen backrub geboren - Rest Hier - und auch Hier der Wikieintrag.

mfg chmee
 
…und um mal die Performancekarte zu spielen: nein, sowas macht man *nicht* in php. Allein schon die fehlende (echte) Parallelisierung ist das Gegenargument schlechthin.
 
Hallo miteinander,

…..Allein schon die fehlende (echte) Parallelisierung ist das Gegenargument schlechthin.
Wei verhält es sich eigentlich mit der max_execution_time des Webservers?
Kann man diese auf "0" (unendlich) setzen? (vllt lokal, aber auf Hosterndenke ich mal nicht)
Ansonsten wäre es ja blöd, da die Last des Webserver extrem hoch wäre und die weitere Benutzung des Webservers eingeschränkt ist.

Meiner Meinung nach, kann man gut in Java, Perl, ... einen Crawler schreiben, aber PHP.
Lasse mich aber gerne belehren.

mfg
bo
 
Das Argument von Navy ist nicht von der Hand zu weisen. Deswegen auch meine Relativierung "dehnbar". Ich hab für gebrauchte Fotoartikel eine Suchmaschine gebaut (siehe Link in Sig).
(A) Das Ding ist in php geschrieben, weil es nicht performant sein muß.. Im Mittel alle 2 Stunden jage ich sie über die Seiten.
(B) Der wichtigere Teil ist immer noch die Ausgabe an den Besucher. Wenn die hakt, ist jede DB egal ;)
(C) Interessant ist, welche Ergebnisse die Suchmaschine auswirft. In meinem Fall geht Nix über die direkte Begriffsuche in Abhängigkeit des Eintragsalters. Allgemeine Suchmaschinen (wie google) müssen schon ein bisschen mehr wirbeln, um interessante/gute/wie auch immer Ergebnisse hervorzubringen.
(D) Natürlich gibt es einige Scraper/Crawler in php. Wie schnell sie sind? Keine Ahnung, aber sie funktionieren..

mfg chmee
 
Zuletzt bearbeitet:
Frag Google, was die im Monat an Traffic haben. Ich tippe so auf 100-200 Terabyte (einfach aus dem Bauch raus).

Ich tippe aus dem Buch heraus, dass die das eher im Bereich von Sekunden oder Minuten an Traffic haben. Aber nicht pro Monat :-D


Eine Relationale Datenbank ist hier definitiv fehl am Platz. Und wenn du die Volltextsuche von MySQL oder eine Software wie Lucene/Solr benutzt, dann hast du ja das Thema verfehlt. Denn das ist es ja, was die Suchmaschine ausmacht. Du musst selbst eine solche Software schreiben.


Ich würde einfach mal loslegen. Im Zweifelsfall lernst du Tonnenweise wichtige Lektionen.



Caffeine lets us index web pages on an enormous scale. In fact, every second Caffeine processes hundreds of thousands of pages in parallel. If this were a pile of paper it would grow three miles taller every second. Caffeine takes up nearly 100 million gigabytes of storage in one database and adds new information at a rate of hundreds of thousands of gigabytes per day.

http://googleblog.blogspot.com/2010/06/our-new-search-index-caffeine.html
 
Wei verhält es sich eigentlich mit der max_execution_time des Webservers?

Was genau hat der Webserver mit dem Crawler zu tun? Du meinst doch nicht etwa, das PHP-Script, was den Crawler ausführt, im Browser zu starten? AUTSCH!

Natürlich wäre die Prämisse, das PHP-Script an der Command-Line zu starten. Damit wäre es rein theoretisch sogar parallelisierbar, wenn man alle Eventualitäten einkalkuliert und anständig die Ressourcen locked, auf die - vor allem schreibend - zugegriffen werden soll => siehe pcntl_fork().

Meiner Meinung nach, kann man gut in Java, Perl, ... einen Crawler schreiben, aber PHP.

Warum ausgerechnet Perl aber PHP nicht? Was prädestiniert Perl für den Anwendungsfall? Ernstgemeinte Frage.

Ich würde sowas allerdings auch eher in einer Sprache bauen, die native Binaries erzeugen kann, schon aufgrund des Ausreizens von mehreren Prozessor-Cores. Oder hat PHP MP-Flags, die ich noch nicht entdeckt habe?
 
Hey,

An die COmmandline habe ich nicht dran gedacht,
habe bisher noch nichts damit gemacht.

Kenne PHP bisher nur "im Browser" ;)
Java , C... kamen mir aufgrund der Thread-fähigkeit in den Sinn.
Da Perl verhältnismäßig schnell mit IO Operationen ist, denke ich, dass sich Perl für HTTP Abfragen auch gut eignet, gibt ja Perl Crawler für Fotos etc.

Mein Post sollte nicht negativ rüberkommen;
habe mich schlecht ausgedrückt.
Entschuldigt bitte.

mfg
bo
 
Zurück