2010-11-25 15 views
17

J'essaie de faire une application web crawler/spider très simple en C++. J'ai été recherché google pour un simple pour comprendre le concept. Et je trouve ceci:Un crawler/spider Web C++ très simple?

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

Mais, son compliqué un peu peu/difficile à digérer pour moi.

Ce que je suis en train de faire est juste, par exemple:

entrez l'URL: www.example.com (je vais utiliser bash-> wget, pour obtenir le contenu/code source)

puis, va chercher, peut-être un lien "href", puis stocker dans un fichier de données.

Un simple tutoriel, ou des lignes directrices pour moi?

Je commence l'apprentissage C++ (1 mois)

+3

D'abord apprendre C++ correctement, puis tenter de faire quelque chose d'aussi compliqué qu'un robot d'exploration. –

+3

Hmm ... Même un simple crawler? Pas aussi compliqué que larbin. Je pense, tout en faisant le robot d'exploration m'aidera à apprendre beaucoup de choses en C++. Devinez, ma pensée est fausse – popurity09

+0

envisager d'utiliser https://github.com/Microsoft/cpprestsdk – Sergei

Répondre

40

D'accord, je vais vous essayer de pointer dans la bonne direction. Conceptuellement, un webcrawler est assez simple. Il s'articule autour d'une structure de données de file d'attente FIFO qui stocke les URL en attente. C++ dispose d'une structure de file d'attente intégrée dans la bibliothèque standard, std::queue, que vous pouvez utiliser pour stocker des URL en tant que chaînes.

L'algorithme de base est assez simple:

  1. Begin avec une URL de base que vous sélectionnez et placez-le sur le dessus de votre file d'attente
  2. Pop l'URL en haut de la file d'attente et le télécharger
  3. Parse le fichier HTML téléchargé et extraire tous les liens
  4. Insérer chaque lien extrait dans la file d'attente
  5. Aller à l'étape 2, ou d'arrêter une fois que vous atteignez une limite

spécifié Maintenant, je l'ai dit qu'un webcrawler est sur le plan conceptuel simple, mais sa mise en œuvre est pas si simple. Comme vous pouvez le voir à partir de l'algorithme ci-dessus, vous aurez besoin d'une bibliothèque de mise en réseau HTTP pour vous permettre de télécharger des URL, et un bon analyseur HTML qui vous permettra d'extraire des liens. Vous avez mentionné que vous pourriez utiliser wget pour télécharger des pages. Cela simplifie quelque peu les choses, mais vous devez toujours analyser les documents HTML téléchargés. Parsing HTML correctement est une tâche non triviale. Une recherche de chaîne simple pour <a href= ne fonctionnera que parfois. Cependant, s'il s'agit simplement d'un programme jouet que vous utilisez pour vous familiariser avec C++, une simple recherche de chaîne peut suffire à vos besoins. Sinon, vous devez utiliser une bibliothèque d'analyse HTML sérieuse.

D'autres considérations doivent également être prises en compte lors de l'écriture d'un webcrawler, telles que politeness. Les gens vont être énervés et éventuellement interdire votre adresse IP si vous essayez de télécharger trop de pages, trop rapidement, à partir du même hôte. Vous devrez peut-être mettre en place une sorte de stratégie dans laquelle votre webcrawler attendra une courte période avant de télécharger chaque site. Vous avez également besoin d'un mécanisme pour éviter de télécharger à nouveau la même URL, obéir à la robots exclusion protocol, éviter les pièges à chenilles, etc ... Tous ces détails s'additionnent pour rendre effectivement l'implémentation d'un webcrawler robuste pas si simple.Cela dit, je suis d'accord avec larsmans dans les commentaires. Un webcrawler n'est pas le meilleur moyen d'apprendre le C++. En outre, C++ n'est pas le meilleur langage pour écrire un webcrawler. L'accès à la performance brute et bas niveau que vous obtenez en C++ est inutile lors de l'écriture d'un programme comme un webcrawler, qui passe le plus clair de son temps à résoudre Télécharger. Un langage de script de niveau supérieur comme Python ou quelque chose est mieux adapté à cette tâche, à mon avis.

+0

J'ai toujours pensé que C/C++ est le meilleur des langages de programmation. Je me trompe tout le temps, quelle honte. Merci de m'avoir fourni une réponse si utile. Je vais abandonner l'idée et essayer de développer autre chose. En cas de changement, avez-vous une idée du langage de programmation utilisé par google? – popurity09

+10

@ popurity09, bien C++ est l'un de mes langages préférés, mais je ne pense pas qu'il existe un "meilleur" langage de programmation. Au contraire, certaines langues sont mieux adaptées à certaines tâches que d'autres. En ce qui concerne Google, tout ce que je sais, c'est qu'une ancienne version de leur webcrawler a été écrite en Python. –

+1

J'ai trouvé ce lien utile pour avoir les concepts de la construction de web araignée http://code.google.com/p/driller-cpp-web-crawler/ – user63898

4

Vérifiez ce robot d'indexation et indexeur Web écrit en C++ à: Mitza web crawler Le code peut être utilisé comme référence. Est propre et fournit un bon départ pour un codage webcrawler . Les diagrammes de séquence peuvent être trouvés sur les pages de liens ci-dessus.

+0

Ceci ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire en dessous de son message - vous pouvez toujours commenter vos propres messages, et une fois que vous aurez suffisamment de [réputation] (http://stackoverflow.com/faq#reputation) vous pourrez à [commenter n'importe quel message] (http://stackoverflow.com/privileges/comment). – Bohemian

+1

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. – Kirk

+2

Et ça * a * changé! : / – blumonkey