web-dev-qa-db-fra.com

Un robot / araignée Web C ++ très simple?

J'essaie de faire une application de robot/araignée Web très simple en C++. J'ai recherché sur google un simple pour comprendre le concept. Et j'ai trouvé ceci:

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

Mais, c'est un peu compliqué/difficile à digérer pour moi.

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

entrez l'url: www.example.com (j'utiliserai bash-> wget, pour obtenir le contenu/le code source)

puis, recherchera peut-être un lien "href", puis stockera dans un fichier de données.

Un tutoriel simple ou des directives pour moi?

Je commence juste à apprendre le C++ (1 mois)

20
popurity09

D'accord, je vais essayer de vous orienter dans 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 URL en attente. C++ a une structure de file d'attente intégrée dans la bibliothèque standard, std::queue , que vous pouvez utiliser pour stocker les URL sous forme de chaînes.

L'algorithme de base est assez simple:

  1. Commencez avec une URL de base que vous sélectionnez et placez-la en haut de votre file d'attente
  2. Affichez l'URL en haut de la file d'attente et téléchargez-la
  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. Passez à l'étape 2 ou arrêtez-vous une fois que vous avez atteint une limite spécifiée

Maintenant, j'ai dit qu'un webcrawler est conceptuellement simple, mais l'implémenter n'est pas si simple. Comme vous pouvez le voir dans 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 d'un bon analyseur HTML qui vous permettent d'extraire des liens. Vous avez mentionné que vous pouviez 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. L'analyse correcte de HTML est une tâche non triviale. Une simple recherche de chaîne pour <a href= ne fonctionnera que parfois. Cependant, si ce n'est qu'un programme jouet que vous utilisez pour vous familiariser avec C++, une simple recherche de chaîne peut suffire à vos fins. Sinon, vous devez utiliser une bibliothèque d'analyse HTML sérieuse.

Il y a aussi d'autres considérations que vous devez prendre en compte lors de l'écriture d'un webcrawler, comme la politesse. Les gens seront énervés et banniront peut-être votre IP si vous essayez pour télécharger trop de pages, trop rapidement, à partir du même hôte. Vous devrez donc peut-être mettre en œuvre une sorte de politique dans laquelle votre robot Web attend pendant 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éissez au protocole d'exclusion des robots , évitez les pièges à robots, etc ... Tous ces détails s'additionnent pour rendre la mise en œuvre d'un navigateur Web robuste pas si simple chose.

Cela dit, je suis d'accord avec Larsmans dans les commentaires. Un webcrawler n'est pas le meilleur moyen d'apprendre le C++. De plus, C++ n'est pas le meilleur langage pour écrire un robot d'exploration. L'accès aux performances brutes et de bas niveau que vous obtenez en C++ est inutile lors de l'écriture d'un programme comme un robot d'exploration, qui passe la plupart de son temps à attendre que les URL se résolvent et Télécharger. Un langage de script de niveau supérieur comme Python ou quelque chose de mieux adapté à cette tâche, à mon avis.

44
Charles Salvia

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

5
user2195463