Le scraping web, Excel VBA

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.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
2
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x