Un très simple c++ web crawler / spider?

j'essaie de faire une application web crawler/spider très simple en C++. J'ai été cherché google pour un simple pour comprendre le concept. Et j'ai trouvé ceci:

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

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

Ce que j'essaie de faire, c'est juste, par exemple:

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

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

un tutoriel simple, ou des lignes directrices pour moi?

je suis juste de commencer l'apprentissage de C++ (1 mois)

18
demandé sur Kenster 2010-11-25 17:20:33

2 réponses

très bien, je vais essayer de vous indiquer la bonne direction. Conceptuellement, un webcrawler est assez simple. Il tourne autour d'une structure de données de file D'attente FIFO qui stocke les URLs en attente. C++ a une structure de file d'attente intégrée dans le libary standard,std::queue, que vous pouvez utiliser pour stocker des URLs sous forme de chaînes.

L'algorithme de base est assez simple:

  1. commencer par une URL de base que vous sélectionnez, et placez-le sur le dessus de votre la file d'attente
  2. Pop L'URL en haut de la file d'attente et de le télécharger
  3. analyser le fichier HTML téléchargé et extraire tous les liens
  4. insérez chaque lien extrait dans la file d'attente
  5. aller à l'étape 2, ou arrêter une fois que vous avez atteint une certaine limite spécifiée

Maintenant, j'ai dit qu'un webcrawler est conceptuellement simple, mais sa mise en oeuvre n'est pas si simple. Comme vous pouvez le voir à partir de l'algorithme ci-dessus, vous aurez besoin: bibliothèque pour vous permettre de télécharger les 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 quand même analyser les documents HTML téléchargés. Analyser correctement HTML est une tâche non-triviale. Une simple recherche de chaîne de caractères pour <a href= ne fonctionne que de temps en temps. Cependant, s'il s'agit simplement d'un programme jouet que vous utilisez pour vous familiariser avec C++, une simple recherche de chaîne de caractères peut suffisant pour vos besoins. Sinon, vous devez utiliser une bibliothèque de parsing HTML sérieuse.

il y a aussi d'autres considérations dont vous devez tenir compte lorsque vous écrivez un webcrawler, comme la politesse. les gens seront furieux et banniront peut-être votre IP si vous tentez de télécharger trop de pages, trop rapidement, depuis le même hôte. Donc, vous pouvez avoir besoin de mettre en œuvre une sorte de politique où votre webcrawler attend pendant une courte période avant de télécharger chaque site. Vous aussi besoin d'un mécanisme pour éviter de télécharger la même URL à nouveau, obéissez au protocole d'exclusion des robots, éviter les pièges à chenilles, etc... Tous ces détails s'ajoutent pour faire réellement la mise en œuvre d'un webcrawler robuste pas une chose si simple.

cela dit, je suis d'accord avec larsmans dans les commentaires. Un webcrawler n'est pas la meilleure façon d'apprendre le C++. De plus, C++ n'est pas le meilleur langage pour écrire un webcrawler. La performance brute et l'accès de bas niveau que vous obtenez en C++ est inutile quand écrire un programme comme un webcrawler, qui passe la plupart de son temps à attendre les URLs à résoudre et télécharger. Un langage de script de niveau supérieur comme Python ou quelque chose est mieux adapté à cette tâche, à mon avis.

41
répondu Charles Salvia 2014-06-19 01:53:43

consultez ce crawler et indexeur web écrit en C++ à: Mitza web crawler Le code peut être utilisé comme référence. Est propre et offre un bon départ pour un webcrawler codding. Les diagrammes de séquence se trouvent dans les pages de liens ci-dessus.

4
répondu user2195463 2016-04-10 10:51:26