2010-11-25 31 views
17

Ich versuche, eine sehr einfache Web Crawler/Spider-App in C++ zu tun. Ich habe google nach einem einfachen gesucht, um das Konzept zu verstehen. Und ich fand dies:Ein sehr einfacher C++ Web Crawler/Spider?

http://www.example-code.com/vcpp/spider.asp

Aber seine irgendwie etwas kompliziert/schwer für mich zu verdauen.

Was ich versuche zu tun ist, nur zum Beispiel:

die URL eingeben: www.example.com (Ich verwende bash-> wget, um den Inhalt/Quellcode zu erhalten)

Dann wird gesucht, vielleicht "eine href" -Link, und dann in einer Datei speichern.

Irgendein einfaches Tutorial oder Richtlinien für mich?

ich gerade beginnen Lernen C++ (1 Monat)

+3

Zuerst lernen Sie C++ richtig, dann versuchen Sie etwas so kompliziert wie ein Crawler zu tun. –

+3

Hmm ... Sogar ein einfacher Crawler? Nicht so kompliziert wie Larbin. Ich denke, während der Crawler wird mir helfen, viele Dinge in C++ zu lernen. Schätze, mein Denken ist falsch – popurity09

+0

betrachten Sie mit https://github.com/Microsoft/cpprestdk – Sergei

Antwort

40

Gut, werde ich versuchen, Sie in die richtige Richtung zu weisen. Konzeptionell ist ein Webcrawler ziemlich einfach. Es dreht sich um eine FIFO-Warteschlangen-Datenstruktur, die ausstehende URLs speichert. C++ verfügt über eine integrierte Warteschlangenstruktur in der Standardbibliothek std::queue, mit der Sie URLs als Zeichenfolgen speichern können.

Der grundlegende Algorithmus ist ziemlich einfach:

  1. mit einer Basis-URL beginnen, die Sie auswählen , und legen Sie es auf der Spitze Warteschlange
  2. Pop die URL an der Spitze der Warteschlange und laden sie es
  3. Parse die heruntergeladene HTML-Datei und extrahieren alle Verbindungen
  4. Einfügen jedes extrahiert Link in die Warteschlange
  5. Goto Schritt 2 oder stoppen, sobald Sie

nun einige angegebene Grenze erreicht, sagte ich, dass ein webcrawler konzeptionell einfach ist, aber es ist nicht so einfach zu implementieren. Wie Sie aus dem obigen Algorithmus sehen können, benötigen Sie: eine HTTP-Netzwerkbibliothek zum Herunterladen von URLs, und einen guten HTML-Parser, mit dem Sie Links extrahieren können. Sie haben erwähnt, dass Sie wget verwenden können, um Seiten herunterzuladen. Das vereinfacht die Dinge etwas, aber Sie müssen die heruntergeladenen HTML-Dokumente noch analysieren. HTML korrekt zu analysieren ist eine nicht-triviale Aufgabe. Eine einfache String-Suche nach <a href= funktioniert nur manchmal. Wenn dies jedoch nur ein Spielzeugprogramm ist, mit dem Sie sich mit C++ vertraut machen, reicht möglicherweise eine einfache String-Suche für Ihre Zwecke aus. Andernfalls müssen Sie eine seriöse HTML-Parsing-Bibliothek verwenden.

Es gibt auch andere Überlegungen, die Sie berücksichtigen müssen, wenn Sie einen Webcrawler schreiben, wie Höflichkeit. Die Leute werden sauer sein und möglicherweise Ihre IP-Adresse verbieten, wenn Sie versuchen, zu viele Seiten zu schnell vom selben Host herunterzuladen. Daher müssen Sie möglicherweise eine Art von Richtlinie implementieren, bei der Ihr Webcrawler eine kurze Zeit wartet, bevor Sie jede Site herunterladen. Sie brauchen auch einen Mechanismus, um das erneute Herunterladen der gleichen URL zu vermeiden, befolgen Sie die robots exclusion protocol, vermeiden Sie Crawler-Traps, etc ... All diese Details summieren sich dazu, dass die Implementierung eines robusten Webcrawlers nicht so einfach ist.

Das sagte, ich stimme mit larsmans in den Kommentaren überein. Ein Webcrawler ist nicht der beste Weg, C++ zu lernen. Außerdem ist C++ nicht die beste Sprache, um einen Webcrawler zu schreiben. Der in C++ verfügbare rohe und niedrige Zugriff ist nutzlos, wenn man ein Programm wie einen Webcrawler schreibt, der die meiste Zeit darauf wartet, dass URLs aufgelöst werden herunterladen. Eine höhere Skriptsprache wie Python oder etwas anderes ist meiner Meinung nach besser für diese Aufgabe geeignet.

+0

Ich immer obwohl, dass C/C++ ist die beste Programmiersprachen. Ich liege die ganze Zeit falsch, was für eine Schande. Danke, dass Sie mir eine so nützliche Antwort geben. Ich werde die Idee fallen lassen und versuchen, etwas anderes zu entwickeln. Hast du irgendeine Ahnung, welche Programmiersprache Google benutzt? – popurity09

+10

@ popurity09, gut C++ ist eine meiner Lieblingssprachen, aber ich glaube nicht, dass es so etwas wie die "beste" Programmiersprache gibt. Vielmehr sind bestimmte Sprachen für bestimmte Aufgaben besser geeignet als andere. Was Google angeht, weiß ich nur, dass eine frühe Version ihres Webcrawlers in Python geschrieben wurde. –

+1

Ich fand diesen Link hilfreich, um die Konzepte zum Bau von Webspinnen zu bekommen http://code.google.com/p/driller-cpp-web-crawler/ – user63898

4

Überprüfen Sie diesen in C++ geschriebenen Webcrawler und Indexer unter: Mitza web crawler Der Code kann als Referenz verwendet werden. Ist sauber und bietet einen guten Start für eine Webcrawler Kodierung. Sequenzdiagramme finden Sie auf den obigen Link-Seiten.

+0

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag - du kannst deine eigenen Beiträge kommentieren, und sobald du genügend [Reputation] (http://stackoverflow.com/faq#reputation) hast, wirst du in der Lage sein [Kommentar zu einem Beitrag] (http://stackoverflow.com/privileges/comment). – Bohemian

+1

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. – Kirk

+2

Und es * hat * sich geändert! : / – blumonkey