Par programmation de la lecture d'une page web
Je veux écrire un programme en C/C++ qui sera dynamiquement lire une page web et d'en extraire les informations. Comme un exemple, imaginez si vous voulais écrire une application pour suivre et enregistrer une vente aux enchères ebay. Est-il un moyen facile de saisir la page web? Une bibliothèque qui fournit cette fonctionnalité? Et est-il un moyen facile de parser la page pour obtenir les données spécifiques?
- TRÈS difficile en C/C++. Son assez ennuyeux, même dans les langues qui ont étendu le support des expressions régulières, d'analyse XML, HTTP, etc (par exemple Java). Comme pour Ebay, il a une API que vous devez utiliser.
Vous devez vous connecter pour publier un commentaire.
Ont un look à la cURL bibliothèque:
BTW, si le C++ n'est pas strictement nécessaire. Je vous encourage à l'essayer C# ou Java. Il est beaucoup plus facile et il y a un moyen intégré.
if (!curl) return 1;
aurait plus de sens, mais je suppose que c'est un nitWindows code:
gethostbyname()
. Il doit utilisergetaddrinfo()
et de la prise en charge d'IPv4 et IPv6.printf("%.*s", nDataLength, buffer);
qui est plus facile, plus rapide et plus sûre.Il y a une bibliothèque TCP/IP disponible pour Windows prend en charge les protocoles HTTP et HTTPS - son utilisation est très simple.
Ultime TCP/IP
Vous pouvez également OBTENIR les fichiers et de les stocker dans une mémoire tampon (via
CUT_DataSource
les classes dérivées). Tous les habituels HTTP est là - MIS, TÊTE, etc. Support pour les serveurs proxy est un jeu d'enfant, comme le secure sockets.Vous n'êtes pas mentionner toute plate-forme, je vous donne donc une réponse pour Win32.
Un moyen simple de télécharger quoi que ce soit à partir de l'Internet est le
URLDownloadToFile
avec leIBindStatusCallback
paramètreNULL
. Pour rendre la fonction plus utile, l'interface de rappel doit être mis en œuvre.Vous pouvez le faire avec la programmation socket, mais c'est difficile de mettre en œuvre les parties du protocole nécessaire de façon fiable chercher une page web. Mieux vaut utiliser une bibliothèque, comme néon. Cela est susceptible d'être installé dans la plupart des distributions Linux. Sous FreeBSD utiliser le chercher à la bibliothèque.
Pour l'analyse des données, parce que le nombre de pages ne pas utiliser XML valide, vous avez besoin pour mettre en œuvre des heuristiques, pas un réel yacc d'analyseur. Vous pouvez mettre en œuvre à l'aide d'expressions régulières ou d'un état de transition de la machine. Que ce que vous essayez de faire implique beaucoup d'essais et d'erreur, vous êtes mieux d'utiliser un langage de script comme Perl. En raison de la forte latence du réseau, vous ne verrez pas de différence dans la performance.
Essayez d'utiliser une bibliothèque, comme Qt, qui peut lire les données à partir de l'ensemble d'un réseau et d'obtenir des données d'un document xml. Cette est un exemple de comment lire un flux xml. Vous pouvez utiliser le ebay nourrir par exemple.