Comment importer des données d’un site Web vers Excel?
Il est bien connu que le World Wide Web contient d’énormes données utiles. Cependant, nous devons importer les données dans Microsoft Excel avant de faire tout type d’analyse. Il existe deux méthodes que vous pouvez utiliser pour effectuer ce type de tâche.
Obtenez manuellement des données externes à partir du Web
Supposons que vous souhaitiez télécharger des revenus sur les films les plus lucratifs à partir de cette page Web, voici comment le faire facilement.
Ouvrez Microsoft Excel et cliquez sur l’onglet Données, dans le groupe Obtenir des données externes, cliquez sur À partir du Web. Après l’apparition d’une nouvelle boîte de dialogue de requête Web, copiez l’adresse Web (http://www.the-numbers.com/movie/records/All-Time-Worldwide-Box-Office) dans le champ Adresse et cliquez sur le bouton Go. Excel commencera à télécharger la page Web comme indiqué dans la figure 1.1. Cliquez simplement sur Non si vous obtenez une boîte d’avertissement d’erreur de script similaire à celle de la figure ci-dessous. La boîte disparaîtra et n’aura aucun impact sur votre processus d’importation.
Figure 1.1
Il y a une flèche dans la boîte jaune dans le coin supérieur droit de la boîte de dialogue Nouvelle requête Web. En cliquant dessus, vous pouvez déterminer s’il faut afficher des icônes similaires avant les tables ou non. Par exemple, il n’y a pas d’icône de flèche à côté du tableau dans le panneau de gauche de la figure 1.2. Et il y aura une icône (dans le panneau de droite) après avoir cliqué sur le bouton fléché pour afficher les icônes.
Figure 1.2
Cliquez sur l’icône fléchée à côté des tables que vous souhaitez sélectionner. Les icônes et les tableaux changeront et seront similaires à ceux indiqués dans le panneau de gauche de la figure 1.3. Après avoir cliqué sur Importer, une boîte de dialogue Importer des données vous sera demandée. Remplissez la plage (de la colonne A à la colonne H dans notre cas) où vous souhaitez placer les données et cliquez sur OK.
Figure 1.3
Les données seront importées dans Excel après avoir cliqué sur Ok. Si vous cliquez avec le bouton droit sur une cellule du tableau et sélectionnez Actualiser, Excel sortira et extraira les données les plus récentes d’une page Web.
Figure 1.4
Et vous pouvez même configurer vos données de requête pour qu’elles soient actualisées de la manière que vous voulez. Cliquez simplement avec le bouton droit sur une cellule du tableau, sélectionnez Propriétés de la plage de données. Dans la boîte de dialogue Propriétés de la plage de données externes, vous pouvez modifier les paramètres de contrôle d’actualisation pour modifier le style. Par exemple, vous pouvez spécifier la requête à actualiser toutes les 60 minutes ou lors de l’ouverture du fichier.
Gratter les données à l’aide de la programmation VBA
La programmation VBA peut être utilisée pour extraire des données d’une page Web. C’est beaucoup plus utile bien que difficile lorsque l’on compare avec la première approche. De plus, vous devez comprendre ce qu’est le HTML avant d’apprendre à gratter des données à l’aide de la programmation VBA. Je vous recommande d’apprendre les connaissances de base du HTML à partir de ce site Web si vous ne savez rien ou peu de choses sur le HTML. Et à partir de là, vous pouvez apprendre presque tout ce qui concerne le grattage Web en utilisant VBA. Cet article ne vous montrera que deux exemples.
Extraire les données d’une page Web
Supposons que nous souhaitions extraire le nom de l’entreprise, l’adresse e-mail et le nom du contact de cette page Web. Si vous ouvrez cette page Web, vous constaterez qu’il y a un bloc de contact en bas. La figure 2.1 montre le bloc de contact et le code source correspondant. L’information dans les boîtes rouges est ce dont nous voulons avoir besoin. Et ceux avec un soulignement vert sont exactement ce que nous devons extraire.
Figure 2.1
Le code suivant peut vous aider à extraire les informations demandées ci-dessus et à les placer dans la première feuille de calcul.
Code source |
Sous Retrieve_Click() 'Créer InternetExplorerSet IE = CreateObject(" InternetExplorer.Application ") 'Ne voyons pas la fenêtre du navigateur.Visible = False ' Ouvre la page web.Naviguez dans "http://www.austrade.gov.au/SupplierDetails.aspx?ORGID=ORG8160044431&folderid=1736" 'Attendez que IE se charge Pendant qu'IE.readyState < > 4 Ou IE.Busy = True DoEvents Loop ' Récupérer le nom de l'entreprise, l'adresse e-mail & Informations de contactset contactobj = IE.document.getElementsByClassName("bloc de détails de contact sombre") htext=contactobj(0).innerHTML MsgBox htext If InStr(htext, "<p > Nom de la société:") Alors ThisWorkbook.Feuilles de travail (1).Cells(1, 1) = Split(Split(htext, "<p > Nom de la société: ")(1), "< br")(0) Se termine Si If InStr(htext, "mailto:") Alors ThisWorkbook.Feuilles de travail (1).Cells(2, 1) = Split(Split(htext, "mailto:")(1), Chr(34) & ">")(0) End If If InStr(htext, "<p > Name:") Alors ThisWorkbook.Feuilles de travail (1).Cells(3, 1) = Split(Split(htext, "<p > Nom: ")(1), "< br") (0) Se Termine Si Ce livre De travail.Feuilles de travail (1).Cellules (4, 1) = IE.Localisationurl ce livre de travail.Enregistrer Ensemble IE = Rien Ensemble contactobj = Rien Fin Sous
» IE.document.getElementsByClassName(« bloc de détails de contact sombre ») « peut vous permettre d’obtenir tous les éléments avec le bloc de nom de classe – détails de contact sombre. Cette page Web répertorie presque toutes les propriétés et méthodes pouvant être utilisées sur des éléments HTML. Vous pouvez choisir celui qui convient à votre propre problème.
La propriété innerHTML peut vous permettre de définir ou de renvoyer le contenu d’un élément HTML. Dans notre cas, il a renvoyé le contenu de l’élément avec le nom de classe « bloc de détails de contact sombre » et l’a défini sur une variable htext. Le contenu (Figure 2.2) peut être invité par « Msgbox htext ».
Figure 2.2
Vous pouvez voir que le texte est bien structuré. C’est pourquoi nous pouvons utiliser la fonction SPLIT pour extraire ce dont vous avez besoin. Par exemple, si nous prenons « <p > Nom de la société: »en tant que délimiteur et formule « Split(htext, »< p > Nom de la société: »)(1) » peut renvoyer le texte entier après « < p > Nom de la société: ». Pour ce texte nouvellement renvoyé, nous pouvons prendre « < br » comme délimiteur et obtenir le texte avant le premier « < br » et c’est le nom de la société. En résumé, la fonction SPLIT est un outil flexible que vous pouvez utiliser pour extraire presque tout. D’autres fonctions utiles incluent LEN, INSTR, GAUCHE, DROITE, MILIEU et REMPLACER. Je ne discuterai pas en détail ici.
Après avoir cliqué sur OK dans la figure 2.2, les données demandées peuvent être importées du Web dans une feuille de calcul Excel. Par exemple, la cellule A1 contient le nom de l’entreprise tandis que la cellule A4 contient l’adresse de la page Web de l’entreprise.
Figure 2.3
En ajoutant le code ci-dessous avant d’enregistrer le classeur, vous pouvez ajouter un lien hypertexte vers la cellule A4.
Code source |
' Ajoutez hyperlinkThisWorkbook.Feuilles de travail (1).Hyperlien.Ajoutez ce livre de travail.Feuilles de travail (1).Cellules (4, 1), ce livre de travail.Feuilles de travail (1).Cellules(4, 1)
Si vous cliquez sur la cellule A4, vous pouvez revenir sur la page Web. Ceci est particulièrement utile lorsque vous devez récupérer des données pour de nombreuses entreprises. Puisque vous pouvez cliquer sur n’importe quel lien hypertexte pour revenir sur la page Web correspondante et ajouter ou mettre à jour des informations manuellement lors de la révision ultérieure.
Figure 2.4
Interagir avec les pages Web
L’exemple ci-dessus illustre simplement comment récupérer des données à partir d’une page Web statique. Mais plus que souvent, nous devons extraire avoir interagi avec des pages Web afin de récupérer une grande quantité de données. Regardez la figure 3.1. Il vous montre comment accéder à la page Web de l’exemple ci-dessus. Vous pouvez voir qu’il y a beaucoup d’industries et pour chaque industrie, il y a beaucoup d’entreprises. Par exemple, il y a 651 entreprises dans l’industrie agroalimentaire. Que devons-nous faire si nous voulons extraire les coordonnées de toutes les entreprises de toutes les industries?
Figure 3.1
Eh bien, le point clé est de savoir comment faire interagir VBA avec des pages Web comme ce que nous faisons manuellement. Prenons l’avantage du S.W.I.S comme exemple. En général, nous espérons qu’Excel pourra cliquer sur Agribusiness (panneau supérieur de la figure 3.1) et ainsi déclencher IE pour nous diriger vers la deuxième page Web. Sur la deuxième page Web (panneau inférieur de la figure 3.1), Excel peut cliquer sur S.W.I.S Advantage, puis IE nous dirige vers la page comme le montre la figure 2.1 afin que nous puissions récupérer les informations de contact de S.W.I.S Advantage.
Après avoir entré le code suivant dans Visual Basic Editor et soumis le code, vous verrez que votre IE est ouvert. La première page Web apparaît suivie de la deuxième page Web. Ici, vous apprendrez à obtenir l’élément de liste déroulante, à sélectionner une option et à déclencher un événement après avoir sélectionné l’option. » m = IE.document.getElementsByTagName (« option »).Longueur – 1″ vous donnera un nombre total d’options. Cela peut être utilisé pour la boucle suivante.
Code source |
Sous récupérer() 'Créer InternetExplorerSet IE = CreateObject(" InternetExplorer.Application ") 'Voyons la fenêtre du navigateur.Visible= True ' Ouvre la page web.Naviguez dans "http://www.austrade.gov.au/international/buy #" 'Attendez que IE se charge Pendant qu'IE.Application Occupée.Attendez DateAdd("s", 1, Maintenant) Application de boucle.Attendre (Maintenant + TimeValue("00:00:10")) ' Partie 1 - Sélectionnez la liste déroulante et déclenchez l'événement après avoir sélectionné une option selectobj = IE.document.getElementsByTagName("sélectionner") m = IE.document.getElementsByTagName ("option").Longueur - 1 selectobj (0).selectedIndex = 1 selectobj(0).FireEvent("onchange") ' Attendez que IE se charge Pendant que IE.readyState < > 4 Ou IE.Occupé = Application vraie.Attendez DateAdd("s", 1, Maintenant) Application de boucle.Attendre (Maintenant + TimeValue("00:00:10")) Sous-Marin de Fin
Cette partie du code peut vous diriger vers la page Web illustrée à la figure 2.1 après qu’Excel ait cliqué sur le prénom. Les noms de toutes les entreprises sont inclus dans l’élément avec le nom de classe de « Nom ». Searchobj est une collection et searchobj(i) peut renvoyer le (i+1)th objet. Par exemple, searchobj(1).Cliquez sur peut vous permettre de visiter la page Web de RIDLEY CORPORATION (Melbourne).
Code source |
' Partie 2 - Sélectionnez le nom de l'entreprise searchobj = IE.document.getElementsByClassName("Nom") searchobj(0).Cliquez sur 'Attendre pendant que IE se chargefaites pendant Que IE.readyState < > 4 Ou IE.Busy = Boucle True DoEvents
Enfin, voici tout le code qui peut vous montrer le processus d’ouverture d’IE, de navigation sur des pages Web et d’extraction de données. Les données extraites seront les mêmes que celles de la figure 2.4.
Code source |
Sous Récupérer() 'Créer InternetExplorerSet IE = CreateObject(" InternetExplorer.Application ") 'Voyons la fenêtre du navigateur.Visible= True ' Ouvre la page web.Naviguez dans "http://www.austrade.gov.au/international/buy #" 'Attendez que IE se charge Pendant qu'IE.Application Occupée.Attendez DateAdd("s", 1, Maintenant) Application de boucle.Attendre (Maintenant + TimeValue("00:00:10")) ' Partie 1 - Sélectionnez la liste déroulante et déclenchez l'événement après avoir sélectionné une option selectobj = IE.document.getElementsByTagName("sélectionner") m = IE.document.getElementsByTagName ("option").Longueur - 1 selectobj (0).selectedIndex = 1 selectobj(0).FireEvent("onchange") ' Attendez que IE se charge Pendant que IE.readyState < > 4 Ou IE.Occupé = Application vraie.Attendez DateAdd("s", 1, Maintenant) Application de boucle.Attendre (Maintenant + TimeValue("00:00:10")) ' Partie 2 - Sélectionnez le nom de l'entreprise searchobj = IE.document.getElementsByClassName("Nom") searchobj(0).Cliquez sur 'Attendre pendant que IE se chargefaites pendant Que IE.readyState < > 4 Ou IE.Busy = True DoEvents Loop ' Partie 3 - Récupérer le nom de l'entreprise, l'adresse e-mail & Informations de contactset contactobj = IE.document.getElementsByClassName("bloc de détails de contact sombre") htext=contactobj(0).innerHTML Si InStr(htext, "<p > Nom de la société:") Alors ThisWorkbook.Feuilles de travail (1).Cells(1, 1) = Split(Split(htext, "<p > Nom de la société: ")(1), "< br")(0) Se termine Si If InStr(htext, "mailto:") Alors ThisWorkbook.Feuilles de travail (1).Cells(2, 1) = Split(Split(htext, "mailto:")(1), Chr(34) & ">")(0) End If If InStr(htext, "<p > Name:") Alors ThisWorkbook.Feuilles de travail (1).Cells(3, 1) = Split(Split(htext, "<p > Nom: ")(1), "< br") (0) Se Termine Si Ce livre De travail.Feuilles de travail (1).Cellules (4, 1) = IE.LocationURL ' Ajoute un hyperlinkThisWorkbook.Feuilles de travail (1).Hyperlien.Ajoutez ce livre de travail.Feuilles de travail (1).Cellules (4, 1), ce livre de travail.Feuilles de travail (1).Cellules (4, 1) Sous-extrémité
En fait, ce que nous devons faire est d’extraire les informations de contact de toutes les entreprises de toutes les industries, par conséquent, nous devons utiliser l’instruction for loop pour terminer cette tâche. Voici le code complet. Et vous pouvez également trouver le code dans Récupérer les coordonnées de toutes les entreprises.xlsm que vous pouvez télécharger à la fin de cet article.
Code source |
Sub Retrieve() Pour idex = 2 À 18' Créer InternetExplorerSet IE = CreateObject("InternetExplorer.Application ") 'Voyons la fenêtre du navigateur.Visible = False ' Ouvre la page web.Naviguez dans "http://www.austrade.gov.au/international/buy #" 'Attendez que IE se charge Pendant qu'IE.Application Occupée.Attendez DateAdd("s", 1, Maintenant) Application de boucle.Attendre (Maintenant + TimeValue("00:00:10")) idexn = idex-1 ' Partie 1 - Sélectionnez dropdownSet selectobj= IE.document.getElementsByTagName("sélectionner") m = IE.document.getElementsByTagName ("option").Longueur - 1 selectobj (0).selectedIndex = idexn selectobj(0).FireEvent("onchange") ' Attendez que IE se charge Pendant que IE.readyState < > 4 Ou IE.Occupé = Application vraie.Attendez DateAdd("s", 1, Maintenant) Application de boucle.Attendre (Maintenant + TimeValue("00:00:10")) wurl = C.-À-D.LocationURL tot = C.-À-D.document.getElementsByClassName("SearchTotal")(0).innerHTML pg = Int(tot / 25) + 1 Max = (tot Mod 25) - 1 ' Partie 2 - Sélectionnez Class = "Name" a = 2 Pour j = 1 À pg Si j = 1 Alors IE.Naviguez (wurl) Sinon C'EST-À-DIRE.Naviguez (wurl &"& pg ="& j) Fin Si Faire Pendant IE.Application Occupée.Attendez DateAdd("s", 1, Now) Boucle Si j < > pg Alors Pour i = 1 À 24, Définissez searchobj = IE.document.getElementsByClassName("Nom") rechercheobj(i).Cliquez sur 'Attendre pendant que IE se chargefaites pendant Que IE.readyState < > 4 Ou IE.Busy = True DoEvents Loop ' Partie 3 - Récupérer le nom de l'entreprise, l'adresse e-mail & Informations de contactset contactobj = IE.document.getElementsByClassName("bloc de détails de contact sombre") htext=contactobj(0).Ce livre de travail innerHTML.Feuilles de calcul (idex).Cellules (a, 1) = j ce livre de travail.Feuilles de calcul (idex).Cells(a, 2) = a-1 Si InStr(htext, "< p > Nom de la société:") Alors ThisWorkbook.Feuilles de calcul (idex).Cells(a, 3) = Split(Split(htext, "<p > Nom de la société: ")(1), "< br")(0) Se termine Si If InStr(htext, "mailto:") Alors ThisWorkbook.Feuilles de calcul (idex).Les cellules (a, 4) = Split(Split(htext, "mailto:")(1), Chr(34) & ">")(0) End If If InStr(htext, "<p > Name:") Alors ThisWorkbook.Feuilles de calcul (idex).Cells(a, 5) = Split(Split(htext, "<p > Nom: ")(1), "< br") (0) Se Termine Si Ce livre De travail.Feuilles de calcul (idex).Cellules (a, 6) = IE.LocationURL C'EST-À-DIRE.GoBack Faire Pendant IE.Application Occupée.Attendez DateAdd("s", 1, Maintenant) Boucle a = a + 1 Ensuite i D'Autre Pour i = 0 À Max Set searchobj = IE.document.getElementsByClassName("Nom") rechercheobj(i).Cliquez sur 'Attendre pendant que IE se chargefaites pendant Que IE.readyState < > 4 Ou IE.Busy = True DoEvents Loop ' Partie 3 - Récupérer le nom de l'entreprise, l'adresse e-mail & Informations de contactset contactobj = IE.document.getElementsByClassName("bloc de détails de contact sombre") htext=contactobj(0).Ce livre de travail innerHTML.Feuilles de calcul (idex).Cellules (a, 1) = j ce livre de travail.Feuilles de calcul (idex).Cells(a, 2) = a-1 Si InStr(htext, "< p > Nom de la société:") Alors ThisWorkbook.Feuilles de calcul (idex).Cells(a, 3) = Split(Split(htext, "<p > Nom de la société: ")(1), "< br")(0) Se termine Si If InStr(htext, "mailto:") Alors ThisWorkbook.Feuilles de calcul (idex).Les cellules (a, 4) = Split(Split(htext, "mailto:")(1), Chr(34) & ">")(0) End If If InStr(htext, "<p > Name:") Alors ThisWorkbook.Feuilles de calcul (idex).Cells(a, 5) = Split(Split(htext, "<p > Nom: ")(1), "< br") (0) Se Termine Si Ce livre De travail.Feuilles de calcul (idex).Cellules (a, 6) = IE.Localisationurl ce livre de travail.Feuilles de calcul (idex).Hyperlien.Ajoutez ce livre de travail.Feuilles de calcul (idex).Cellules (a, 6), ce livre de travail.Feuilles de calcul (idex).Cellules (a, 6) IE.GoBack Faire Pendant IE.Application Occupée.Attendez DateAdd("s", 1, Maintenant) Boucle a = a + 1 Ensuite, Je Termine Si Cetteworkbook.Enregistrer Ensuite j Set IE = Rien Set contactobj = Rien Suivant idex End Sub
Le seul point que je dois expliquer est illustré à la figure 3.2. Un site Web ne peut répertorier que 25 entreprises. Lorsque le nombre total d’entreprises est supérieur à 25, il y aura plus d’une page. La figure 3.2 montre qu’il existe une règle pour obtenir l’adresse des pages après la première page. C’est le résultat de l’adresse concaténante de la première page, « &pg= » et du numéro de page réel. Et pour toutes les pages avant la dernière page, le nombre total d’objets est de 25. « IE.document.getElementsByClassName(« SearchTotal »)(0).innerHTML » peut renvoyer le nombre total d’entreprises dans une industrie. Dans notre cas, ce sera 651. « Int (tot / 25) + 1 » peut vous obtenir le nombre total de pages. Et « Max =(tot Mod 25)-1 » peut renvoyer le nombre maximum d’entreprises sur la dernière page. Je vais m’arrêter ici et vous laisser comprendre comment appliquer cette idée au code. C’est une bien meilleure approche pour saisir le code. Vous pouvez laisser un commentaire si vous avez des questions.
Figure 3.2
Voici une partie de l’excel final. Les coordonnées de toutes les entreprises d’un même secteur sont regroupées dans une feuille de calcul.
Figure 3.3
- Comment extraire automatiquement des données d’un site Web vers Excel?
- Importer des Données (Phrase, Paragraphes, Tableaux, Commentaires) de Word vers Excel
- 6 Meilleurs Livres de Programmation Excel VBA (Pour les Débutants & Utilisateurs Avancés)
- Apprendre la Programmation Excel VBA & Macros (Tutoriel Gratuit – Étape par étape)
- Conseils de codage Excel VBA
- Ce que Vous pouvez faire avec VBA
- Introduction aux macros VBA
Télécharger le fichier de travail
Téléchargez le fichier de travail à partir du lien ci-dessous.
Extraire des données du Web vers Excel.rar