Grattage de données à partir du site web à l'aide de vba
Im essayant de recueillir des données à partir du site web: http://uk.investing.com/rates-bonds/financial-futures via vba, à l'instar de prix en temps réel, c'est à dire allemand 5 ANS Bobl, NOUS 30Y T-Bond, j'ai essayé excel requête sur le web, mais il ne se gratte l'ensemble du site, mais je tiens à gratter de la fréquence, est-il un moyen de faire cela?
Vous avez besoin d'utiliser DOM/XML parser ensuite, vous pouvez soit effectuer une itération de la collection d'éléments ou de se référer à des éléments spécifiques par leur xpath.
OriginalL'auteur rockNroll | 2014-11-21
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs façons de le faire. C'est une réponse que je vous écris en espérant que tous les éléments de base d'Internet Explorer automatisation sera trouvé lors de la navigation pour les mots clés "grattage de données de site web", mais n'oubliez pas que rien ne vaut votre propre recherche (si vous ne voulez pas de coller à la pré-écrit les codes que vous n'êtes pas en mesure de personnaliser).
Veuillez noter que ceci est une façon, que je ne préfère pas en termes de performances (puisqu'elle dépend du navigateur de vitesse), mais que c'est bon de comprendre le raisonnement derrière Internet de l'automatisation.
1) Si j'ai besoin de naviguer sur le web, j'ai besoin d'un navigateur! J'ai donc créer un navigateur Internet Explorer:
2) je demande le navigateur pour parcourir la page web cible. Grâce à l'utilisation de la propriété ".Visible", je décide si je veux voir le navigateur de faire son travail ou pas. Lors de la génération du code est agréable d'avoir
Visible = True
, mais lorsque le code de travail de grattage de données est agréable de ne pas le voir, à chaque fois, doncVisible = False
.3) La page web aura besoin d'un peu de temps à charger. Donc, je vais attendre en attendant, il est occupé...
4) Bien, maintenant que la page est chargée. Disons que j'ai envie de gratter le changement de la US30Y T-Bond:
Ce que je vais faire est tout simplement en cliquant sur la touche F12 sur Internet Explorer pour voir la page web du code, et donc à l'aide du pointeur (dans le cercle rouge), je vais cliquer sur l'élément que je veux gratter pour voir comment puis-je atteindre mon but.
5) Ce que je dois faire est simple. Tout d'abord, je vais obtenir par la propriété ID de la
tr
de l'élément contenant la valeur:Ici, je vais obtenir une collection de
td
éléments (en particulier,tr
est une ligne de données, et latd
sont ses cellules. Nous sommes à la recherche pour le 8, je vais donc écrire:Pourquoi ai-je écrire 7 au lieu de 8? Parce que les collections de cellules commence à partir de 0, de sorte que l'indice de la 8ème élément est de 7 (8-1). Peu de temps l'analyse de cette ligne de code:
.Cells()
me fait accéder à latd
éléments;innerHTML
est la propriété de la cellule contenant la valeur que nous recherchons.Une fois que nous avons notre valeur, qui est désormais stockée dans le
myValue
variable, il nous suffit de fermer le navigateur IE et en libérant de la mémoire par la valeur de Rien:Eh bien, maintenant vous avez votre valeur et vous pouvez faire ce que vous voulez avec elle: le mettre dans une cellule (
Range("A1").Value = myValue
), ou dans une étiquette de la forme (Me.label1.Text = myValue
).J'aimerais juste souligner-vous que ce n'est pas la façon dont StackOverflow œuvres: ici, vous pouvez poster des questions sur des problèmes de codage, mais vous devriez faire votre propre recherche en premier. La raison pour laquelle je vais répondre à une question qui ne montre pas trop d'effort de recherche est juste que je vois, il a demandé à plusieurs reprises et, à l'époque où j'ai appris à le faire, je me souviens que j'aurais aimé avoir un meilleur support pour commencer avec. Alors, j'espère que cette réponse, qui est juste une "étude d'entrée" et pas du tout le meilleur/la plus complète solution, peut être un support pour les nouveaux utilisateurs ayant le même problème. Parce que j'ai appris à programmer grâce à cette communauté, et j'aime à penser que vous et d'autres, les débutants peuvent utiliser mon entrée pour découvrir le beau monde de la programmation.
Profiter de votre pratique 😉
Un autre interlocuteur voulait plus, donc je lui ai donné en fonction de votre point de départ stackoverflow.com/questions/41848354/website-data-table-scraper/...
OriginalL'auteur Matteo NNZ
D'autres méthodes ont été mentionnés alors laissez-nous s'il vous plaît reconnaître que, au moment de la rédaction, nous sommes au 21ème siècle. Nous allons parc de la bus local navigateur ouverture, et mouche avec un XMLHTTP OBTENIR demande (XHR OBTENIR pour faire court).
Wiki moment:
C'est une méthode rapide pour la récupération des données qui ne nécessite pas l'ouverture d'un navigateur. La réponse du serveur peut être lu dans un HTMLDocument et le processus d'accaparement de la suite du tableau à partir de là.
Dans le code ci-dessous, le tableau est saisi par son id
cr1
.À l'aide des sous,
WriteTable
, on boucle les colonnes (td
tags), puis les lignes de la table (tr
balises), et enfin parcourir la longueur de chaque ligne de la table, de table, de cellule en cellule de tableau. Comme nous voulons seulement les données des colonnes 1 et 8, unSelect Case
instruction permet de spécifier ce qui est écrit dans la feuille.Exemple de page vue:
Exemple de code de sortie:
VBA:
Mais un +1 est toujours bien mérité pour cette réponse, qui pour ce cas d'utilisation spécifiques (après l'ajout d'une chaîne aléatoire de l'URL pour éviter de ramasser de cache) est beaucoup plus propre que de simplement placer un robot derrière le navigateur.
C'est très gentil. Pouvez-vous m'en dire plus sur la mise en cache et à l'aide de random chaîne de caractères ajoutée à l'url s'il vous plaît? Souhaitez-vous ajouter ceci à la fin de chaque URL? Comment cela fonctionnerait-il? Avec la mise en cache des problèmes avant que j'ai utilisé .setRequestHeader "if-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
Pour un cadre, il dépend de la situation, je voudrais l'utiliser normalement le sélénium pour traiter les images, mais il peut être possible d'analyser une nouvelle url de l'image et de l'utiliser dans une deuxième requête http . Parfois, c'est une option.
Concernant le cadre, j'ai essayé une couple de fois pour faire ce que vous dites... mais pas toujours réussi (souvent, surtout avec les nouveaux sites web Angulaire, le contenu HTML est presque entièrement rendus par le Tapuscrit/JavaScript et la demande GET XMLHTTP ne peut pas le lire car il ne fait pas exécuter le script derrière).
OriginalL'auteur QHarr
vous pouvez utiliser winhttprequest objet au lieu d'internet explorer qu'il est bon de charger des données à l'exclusion de photos n de la publicité au lieu de télécharger à pleine page web y compris les publicités n photos de ceux qui font de l'internet explorer objet lourd comparer à winhttpRequest objet.
OriginalL'auteur Nitin k tomar
Cette question posée depuis longtemps. Mais j'ai pensé informations suivantes seront utiles pour les débutants. En fait, vous pouvez facilement obtenir les valeurs de nom de la classe comme ça.
Et si vous êtes nouveau sur le web scraping veuillez lire ce blog.
Web Grattage - Notions De Base
Et aussi il existe différentes techniques pour extraire des données à partir de pages web. Cet article d'expliquer quelques-uns d'entre eux avec des exemples.
Web Grattage - Collecte des Données à Partir d'une Page web
OriginalL'auteur Roshantha De Mel
J'ai modifié quelque chose qui ont été poping up d'erreur pour moi et jusqu'à la fin avec ce qui a très bien fonctionné pour extraire les données dont j'avais besoin:
OriginalL'auteur IRENE G