Le scraping web, Excel VBA
Voici un guide détaillé sur le scraping web avec VBA dans Excel, incluant les étapes et l’explication du code. Le web scraping consiste à extraire des données de sites web, et cela peut être fait dans Excel VBA en utilisant des bibliothèques telles que Microsoft HTML Object Library et Microsoft Internet Controls. L’idée est d’envoyer une requête à une page web, de récupérer le contenu HTML, puis d’extraire les données pertinentes (par exemple, des tableaux, des listes ou d’autres éléments).
Prérequis :
1. Microsoft HTML Object Library
2. Microsoft Internet Controls
Assurez-vous d’activer les références nécessaires dans l’éditeur VBA :
- Allez dans l’onglet Développeur > Visual Basic > Outils > Références.
- Cochez Microsoft HTML Object Library et Microsoft Internet Controls.
Étapes pour le Web Scraping :
1. Créer un objet Internet Explorer : Cela nous permet d’interagir avec une page web en arrière-plan.
2. Naviguer vers le site web : Utilisez la méthode Navigate de l’objet Internet Explorer pour charger la page.
3. Attendre que la page se charge : Cela garantit que le contenu de la page est complètement chargé avant de tenter de l’extraire.
4. Extraire le contenu HTML : Une fois la page chargée, nous pouvons accéder au DOM (Document Object Model) pour extraire les données spécifiques.
5. Fermer le navigateur : Après avoir extrait les données nécessaires, il est bon de fermer le navigateur.
Code VBA pour le Web Scraping :
Sub WebScrapingExample() ' Étape 1 : Déclarer les variables Dim IE As Object Dim HTMLDoc As Object Dim URL As String Dim data As Object Dim i As Integer ' Étape 2 : Définir l'URL du site web à scraper URL = "https://example.com" ' Remplacez par l'URL de votre choix ' Étape 3 : Créer une nouvelle instance d'Internet Explorer Set IE = CreateObject("InternetExplorer.Application") ' Étape 4 : Rendre Internet Explorer invisible (pas d'interface utilisateur) IE.Visible = False ' Étape 5 : Naviguer vers l'URL IE.Navigate URL ' Étape 6 : Attendre que la page se charge complètement Do While IE.Busy Or IE.ReadyState <> 4 DoEvents ' Permet à la page de se charger Loop ' Étape 7 : Récupérer l'objet document (contenu HTML) Set HTMLDoc = IE.document ' Étape 8 : Extraire les données (par exemple, d'un tableau avec l'id "data-table") Set data = HTMLDoc.getElementsByTagName("tr") ' Adaptez le sélecteur en fonction des données à récupérer ' Étape 9 : Boucler à travers les lignes du tableau et extraire les données For i = 0 To data.Length - 1 ' Exemple : Extraire le texte de chaque cellule dans la ligne Debug.Print data.Item(i).Children(0).innerText ' Colonne 1 Debug.Print data.Item(i).Children(1).innerText ' Colonne 2 ' Continuez pour les autres colonnes si nécessaire Next i ' Étape 10 : Fermer Internet Explorer IE.Quit ' Nettoyage Set IE = Nothing Set HTMLDoc = Nothing Set data = Nothing End Sub
Explication du Code :
1. Déclaration des Variables :
- IE : L’objet Internet Explorer utilisé pour charger la page web.
- HTMLDoc : L’objet représentant le document HTML de la page, ce qui permet d’interagir avec le DOM de la page.
- URL : L’URL du site web à scraper.
- data : Un objet qui contient les éléments HTML (dans ce cas, les lignes de tableau
).
2. Objet Internet Explorer :
- On crée une nouvelle instance d’Internet Explorer en utilisant CreateObject(« InternetExplorer.Application »).
- IE.Visible = False permet de rendre le navigateur invisible, afin que le processus de scraping se fasse en arrière-plan.
3. Navigation vers l’URL :
- La commande IE.Navigate URL envoie une requête vers l’URL spécifiée et charge son contenu.
4. Attente du Chargement de la Page :
- Do While IE.Busy Or IE.ReadyState <> 4 assure que la page soit entièrement chargée. Le code attend que le navigateur ait terminé le chargement avant de passer à l’étape suivante.
5. Accès au Document HTML :
- Une fois la page complètement chargée, Set HTMLDoc = IE.document stocke le DOM de la page dans l’objet HTMLDoc, ce qui nous permet d’accéder au contenu de la page.
6. Extraction des Données :
- Dans cet exemple, nous recherchons les éléments
(lignes de tableau). Vous pouvez ajuster le sélecteur selon la structure de la page que vous scrappez. - HTMLDoc.getElementsByTagName(« tr ») renvoie tous les éléments
de la page, qui correspondent généralement aux lignes d’un tableau.
7. Boucle à Travers les Lignes :
- Nous parcourons chaque ligne (data.Length – 1) et extrayons le texte de chaque cellule dans la ligne en utilisant innerText.
8. Fermeture du Navigateur :
- IE.Quit ferme l’instance d’Internet Explorer une fois le scraping terminé.
9. Nettoyage :
- On libère la mémoire en définissant les objets à Nothing pour éviter les fuites de mémoire.
Notes :
- Adapter l’Extraction des Données : Selon la structure de la page web, vous devrez peut-être ajuster le sélecteur (getElementsByTagName) ou utiliser d’autres méthodes comme getElementById, getElementsByClassName, ou querySelector.
- Gestion des Erreurs : Ajoutez des gestionnaires d’erreurs pour garantir que le code fonctionne bien si la structure de la page change ou si des problèmes réseau surviennent.
- Temps de Chargement de la Page : Si la page contient du contenu dynamique chargé avec JavaScript, vous devrez peut-être attendre que ce contenu soit complètement chargé. Dans ce cas, l’utilisation de Selenium peut être plus appropriée que l’automatisation avec Internet Explorer.
Considérations Avancées :
1. Scraping de Données sur Plusieurs Pages : Si vous avez besoin de scraper plusieurs pages (pagination), vous pouvez modifier le code pour parcourir chaque URL de page.
2. Gestion du Contenu Dynamique : Si les données sont chargées dynamiquement via JavaScript, vous pouvez envisager d’utiliser Selenium, car Internet Explorer ne rendra pas le contenu dynamique comme les navigateurs modernes.
3. Enregistrement des Données dans Excel : Après avoir extrait les données, vous pouvez les écrire dans des cellules Excel en utilisant quelque chose comme Cells(i + 1, 1).Value = data.Item(i).Children(0).innerText.