Ist es möglich, Milliarden von Seiten auf einem einzigen Server zu crawlen?
Antworten
Zu viele Anzeigen?Nicht, wenn Sie wollen, dass die Daten auf dem neuesten Stand sind.
Selbst ein kleiner Akteur im Suchspiel würde die Zahl der gecrawlten Seiten in die Milliarden treiben.
" Im Jahr 2006 hat Google über 25 Milliarden Webseiten,[32] 400 Millionen Suchanfragen pro Tag,[32] 1,3 Milliarden Bilder und über eine Milliarde Usenet-Nachrichten indexiert. " - Wikipedia
Und denken Sie daran, dass in dem Zitat Zahlen aus dem Jahr 2006 genannt werden. Das ist ein alter Hut. Der Stand der Technik ist weit mehr als das.
Frische des Inhalts:
- Es werden ständig neue Inhalte in großem Umfang hinzugefügt (Realität)
- Bestehende Seiten ändern sich oft - Sie müssen sie aus zwei Gründen neu crawlen: a) um festzustellen, ob sie tot sind, b) um festzustellen, ob sich der Inhalt geändert hat.
Höflichkeit des Crawlers:
- Man kann eine bestimmte Seite nicht überwältigen. Wenn Sie eine große Website wiederholt von derselben IP-Adresse aus aufrufen, werden Sie wahrscheinlich entweder eine CAPTCHA-Aufforderung erhalten oder Ihre IP-Adresse wird gesperrt. Die Websites tun dies auf der Grundlage der Bandbreite, der Häufigkeit der Anfragen, der Anzahl der "schlechten" Seitenanfragen und aller möglichen anderen Dinge.
- Es gibt ein robots.txt-Protokoll, das Websites den Crawlern zur Verfügung stellen, befolgen Sie es.
- Es gibt einen Sitemap-Standard, den Websites den Crawlern zur Verfügung stellen. Verwenden Sie ihn, um die Erkundung zu erleichtern - Sie können auch (wenn Sie wollen) die relative Bedeutung der Seiten auf der Website gewichten und die Lebenszeit in Ihrem Cache verwenden, wenn dies in der Sitemap angegeben ist.
Verringern Sie die Arbeit, die Sie tun müssen:
- Oftmals werden Websites unter mehreren Namen veröffentlicht - Sie möchten Seiten erkennen, die identisch sind - dies kann unter derselben URL oder unter verschiedenen URLs geschehen. Ziehen Sie einen Hash der Seiteninhalte in Betracht (abzüglich der Kopfzeilen mit Datum/Uhrzeit, die sich ständig ändern). Behalten Sie diese Seitenäquivalenzen im Auge und überspringen Sie sie beim nächsten Mal oder stellen Sie fest, ob es ein bekanntes Mapping zwischen den gegebenen Sites gibt, so dass Sie sie nicht crawlen müssen.
- SPAM. Viele Leute da draußen machen tonnenweise Seiten, die nur Pass-Throughs für Google sind, aber sie "säen" sich selbst im ganzen Web, damit sie gecrawlt werden.
Man befindet sich also immer in einem Kreislauf des Krabbelns. Immer. Sie werden mit ziemlicher Sicherheit auf mehreren (vielen, vielen, vielen) Rechnern arbeiten, um sicherzustellen, dass Sie die Höflichkeit einhalten und trotzdem die Frische der Daten genießen können.
Wenn Sie die Schnellvorlauftaste drücken und einfach nur Seiten mit Ihrem eigenen Algorithmus bearbeiten möchten, können Sie wahrscheinlich auf einen vorgefertigten Crawler zurückgreifen, wenn Sie ihn schnell benötigen - denken Sie an die "80 Beine", wie sie in Programmierbares Web . Sie nutzen dazu die Rechenleistung der Clients.
80 Beine verbrauchen Rechenzeit von Kindern, die auf Websites spielen. Stellen Sie sich einen Hintergrundprozess auf einer Webseite vor, der aufruft und arbeitet, während Sie die Seite nutzen, ohne dass Sie es merken, weil er den Plura-Technologie-Stack verwendet.
"Plura Processing hat eine neue und innovative Technologie für verteiltes Rechnen entwickelt. Unsere zum Patent angemeldete Technologie kann in jede Webseite eingebettet werden. Die Besucher dieser Webseiten werden zu Knoten und führen sehr kleine Berechnungen für die Anwendung durch, die in unserem verteilten Rechennetzwerk läuft." - Plura Demo-Seite
Sie geben also den "Crawl" über Tausende von Knoten an Tausenden von IPs aus, sind höflich zu den Websites und crawlen deshalb schnell. Ich persönlich weiß nicht, ob ich diese Art der Verwendung des Browsers des Endbenutzers gut finde, es sei denn, es würde auf allen Websites, die ihre Technologie verwenden, SEHR deutlich darauf hingewiesen - aber es ist ein unkonventioneller Ansatz, wenn sonst nichts.
Es gibt andere Crawler, die im Rahmen von Community-Projekten geschrieben wurden und die Sie wahrscheinlich auch verwenden könnten.
Wie bereits von anderen Befragten angemerkt - rechnen Sie nach. Es müssen ~2300 Seiten pro Sekunde gecrawlt werden, um mit dem Crawlen von 1B Seiten alle 5 Tage Schritt zu halten. Wenn Sie bereit sind, länger zu warten, geht die Zahl zurück. Wenn Sie vorhaben, mehr als 1B Seiten zu crawlen, erhöht sich die Zahl. Einfache Mathematik.
Viel Glück!
Spidering in großem Maßstab (eine Milliarde Seiten) ist ein schwieriges Problem. Hier sind einige der Probleme:
-
Netzwerk-Bandbreite. Wenn man davon ausgeht, dass jede Seite 10Kb groß ist, dann sind das insgesamt 10 Terabyte, die abgerufen werden müssen.
-
Netzwerklatenz / langsame Server / Überlastung bedeuten, dass Sie nicht annähernd die theoretische Bandbreite Ihrer Netzwerkverbindung erreichen werden. Multi-Threading für Ihren Crawler ist nur bedingt hilfreich.
-
Ich gehe davon aus, dass Sie die Informationen, die Sie aus den Milliarden von Seiten extrahiert haben, speichern müssen.
-
Ihr HTML-Parser muss mit Webseiten zurechtkommen, die auf alle möglichen Arten fehlerhaft sind.
-
Um zu vermeiden, dass Sie in Schleifen hängen bleiben, müssen Sie erkennen, dass Sie "diese Seite bereits bearbeitet haben".
-
Die Seiten ändern sich, so dass Sie sie erneut besuchen müssen.
-
Sie müssen sich mit "robots.txt" und anderen Konventionen befassen, die das Verhalten von (braven) Crawlern regeln.
Das Originalpapier von Page und Brin (Google) aus dem Jahr 1998 beschrieb das Crawlen von 25 Millionen Seiten auf 4 Maschinen in 10 Tagen. Sie hatten jeweils 300 Verbindungen pro Rechner geöffnet. Ich denke, das ist immer noch ziemlich gut. Bei meinen eigenen Experimenten mit handelsüblichen Maschinen unter Linux konnte ich zuverlässig 100-200 gleichzeitige Verbindungen herstellen.
Beim Crawlen gibt es drei Hauptaufgaben: (1) Auswählen, was als nächstes gecrawlt werden soll, (2) Abrufen dieser Seiten, (3) Speichern dieser Seiten. Für (1) müssen Sie eine Art Prioritäts-Warteschlange implementieren (z. B. für die Breadth-First-Suche oder OPIC), und Sie müssen auch verfolgen, wo Sie waren. Dies kann mit Hilfe eines Bloom-Filters geschehen. Bloom-Filter (siehe Wikipedia) können auch verwendet werden, um zu speichern, ob eine Seite eine robot.txt-Datei hatte und ob ein Präfix einer bestimmten URL ausgeschlossen ist.
(2) Der Bezug der Seiten ist ein Fixkostenfaktor, an dem Sie nicht viel ändern können. Da die Anzahl der offenen Verbindungen auf einem Rechner jedoch begrenzt ist, werden Sie, wenn Sie ein Kabel haben, wahrscheinlich nicht annähernd die gesamte verfügbare Bandbreite nutzen können. Möglicherweise müssen Sie sich jedoch um Bandbreitenbeschränkungen kümmern.
(3) Die Speicherung der Seiten erfolgt in der Regel in einer Web-Archivdatei, wie sie das Internet-Archiv verwendet. Mit Komprimierung kann man wahrscheinlich eine Milliarde Seiten in 7 Terabyte speichern, also wäre es vom Speicherplatz her erschwinglich, eine Milliarde Seiten zu haben. Als Schätzung dessen, was eine Maschine leisten kann, nehmen wir an, Sie besorgen sich eine billige 200-Dollar-Maschine mit 1 GB Ram und einer 160-GB-Festplatte. Bei 20 KB pro Seite (verwenden Sie Range-Requests, um zu vermeiden, dass große Seiten ganz verschluckt werden), würden 10 Millionen Seiten 200 GB beanspruchen, komprimiert sind es jedoch etwa 70 GB.
Wenn Sie ein Archiv führen, auf dem Ihre Suchmaschine läuft (auf dem Sie bereits z. B. Page Rank und bm25 berechnet haben), und ein aktives Crawl-Archiv, dann haben Sie 140 GB verbraucht. Damit bleiben etwa 20 GB für andere zufällige Dinge übrig, die Sie verwalten müssen. Wenn Sie den Speicherbedarf berechnen, den Sie benötigen, um so viel wie möglich von Ihrer Prioritätswarteschlange und den Bloom-Filtern im Arbeitsspeicher zu halten, sind Sie ebenfalls am Rande des Möglichen. Wenn Sie 300.000 Seiten pro Tag crawlen, brauchen Sie etwas mehr als einen Monat/10 Millionen Seiten crawlen
5 Jahre nachdem die Frage gestellt wurde, kann ich mit Ja antworten.
Und unsere Crawling-Maschine ist nicht einmal mehr sehr teuer, sie kann bei EBay für ca. 3000 Euro gekauft werden und enthält 24x1TB 2,5" Festplatten (die als Single Disks laufen) mit zwei 6 Core Intel Xeons (also 12cores/24 Threads) und 96GB RAM unter Verwendung einer 10GBit Leitung (mit nur 33% Percentile) in einem Luxemburger Datacenter.
Es werden 100.000 gleichzeitige HTTP-Verbindungen verwendet, was zu etwa 30.000 gecrawlten Seiten pro Sekunde führt.
Ja, die Computer sind heute ziemlich schnell. Das Hauptproblem ist übrigens die URL-Behandlung und die Erkennung von Seitenduplikaten (dieselbe Seite ist auf verschiedenen Wegen erreichbar), nicht aber die Netzverbindung.
Forscher der Texas A&M haben die IRLbot der hochgradig skalierbar und in der Lage ist, Milliarden von Webseiten in "kurzer" Zeit (~7 Tage für 1 Milliarde?) mit geringen Ressourcen (d. h. einer geringen Anzahl von PCs) zu crawlen. Die Forscher der Texas A&M haben die folgenden Statistiken für ihren Crawler vorgelegt:
Wir bieten eine Reihe von Techniken zur Bewältigung dieser Probleme an und testen ihre Leistung in einer Implementierung, die wir IRLbot nennen. In unserem jüngsten Experiment, das 41 Tage dauerte, hat IRLbot auf einem einzigen Server erfolgreich 6,3 Milliarden gültige HTML-Seiten gecrawlt (7,6 Milliarden Verbindungsanfragen) und erreichte eine durchschnittliche Downloadrate von 319 Mb/s (1.789 Seiten/s). Im Gegensatz zu unseren früheren Experimenten mit Algorithmen Algorithmen, die in verwandten Arbeiten vorgeschlagen wurden, erlebte diese Version von IRLbot keine keine Engpässe und verarbeitete erfolgreich Inhalte von über 117 Millionen Hosts, analysierte 394 Milliarden Links und entdeckte eine Teilmenge des Webgraphen mit 41 Milliarden eindeutigen Knoten.
Über das Design und die Architektur ihres Crawlers können Sie in ihrem veröffentlichten Papier lesen, IRLbot: Skalierung auf 6 Milliarden Seiten und mehr oder in ihrem Vollständiges Papier (sehr detailliert) .
Die Crawl-Rate hängt jedoch in hohem Maße von Ihrer Bandbreite und der Menge der zu verarbeitenden Daten ab. Anhand der obigen Statistiken können wir sehen, dass Texas A&M eine Verbindung mit 319 Mbit/s hat (etwa 100 Mal schneller als ein durchschnittlicher US-Heimanschluss), etwa 22 kB an Daten pro Seite verarbeitet und 1.789 Seiten pro Sekunde herunterlädt. Wenn Sie den Crawler über Ihren Heimanschluss laufen lassen, können Sie die folgende Leistung erwarten:
- @3,9 Mbps (durchschnittliche Geschwindigkeit für US-Bürger) / 22 kB pro Seite = ~22 Seiten pro Sekunde: Es würde etwa 526 Tage (~1,5 Jahre) dauern, 1 Milliarde Seiten herunterzuladen.
- Bei 20 Mbit/s (oberes Ende der Bandbreite zu Hause) / 22 kB/Seite = ~116 pps: Es würde etwa 100 Tage (~3 Monate) dauern, 1 Milliarde Seiten herunterzuladen.
- See previous answers
- Weitere Antworten anzeigen