Récupération de données (scraping) en VBA

Bonjour à tous,

J'avais fabriqué un outil en vba pour récupérer régulièrement et archiver de manière structurée (dans Excel) les données en ligne concernant une liste de sociétés (à partir d'Excel). Une démonstration sur mon site perso ici (sans les [ ]) :

lucwalraf[.]com/2019/10/24/recuperation-de-donnees-sur-internet/

Tout reposait sur la possibilité de commander IE à partir de vba (parser le HTML). Mais maintenant, quand la macro lance IE sur certains sites (Linkedin, Facebook) ils renvoient vers Edge - et là ça la plante. Apparemment, vba ne sait pas commander Edge. Donc je cherchais une autre solution.

J'ai essayé Selenium pour ouvrir et naviguer sur Chrome ou Firefox, mais ça ne fonctionne pas : problèmes de compatibilité des versions de soft apparemment.

J'ai essayé aussi cette méthode, qui m'ouvre bien [ma page] sur Chrome - mais je ne sais pas comment la traiter ensuite.

Option Explicit
Private pWebAddress As String
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub LoadExplorer()

ShellExecute 0, "Open", "Chrome.exe", [ma page], "", 1 ' You can change the URL.

End Sub

Si quelqu'un a des idées, je suis preneur de toutes les pistes,

Merci

Luc

Bonjour

Pas de solution mais une précision : le nouvel Edge repose sur le moteur Chrome

Bonjour,

Voici une solution, qui fonctionne mais reste très artisanale ! C'est pour cela que ce post m'intéresse si quelqu'un avait une solution plus confortable.

L'idée est que, une fois signé dans chrome ou firefox (le navigateur par défaut doit être l'un des deux), le code VBA lance les pages souhaitées en faisant précéder l'url par view-source: On récupère alors le code source par copier/coller.

Il ne faut rien toucher tant que l'application n'est pas revenue sur excel (réglage à faire si problème) ou tant que ce message n'apparait pas !

capture d ecran 417

Dans ce cas de figure, il faut que toutes les infos nécessaires soient dans l'url (méthode get si form)

#If VBA7 Then
    Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#Else
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#End If

Sub telecharger()
Dim nav As Long, MyData As DataObject
Set MyData = New DataObject
Dim page As New HTMLDocument, elem As Object

    fenetre = ActiveWindow.Caption

    nav = ShellExecute(0, "open", "https://www.qwant.com/", 0, 0, 1)
    Application.Wait (Now + TimeValue("00:00:02"))

    For ligne = 2 To Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row

        url = Sheets(1).Cells(ligne, 1)

        SendKeys "%d"
        Application.Wait (Now + TimeValue("00:00:01"))
        SendKeys "view-source:" & url
        SendKeys "{ENTER}"
        Application.Wait (Now + TimeValue("00:00:10"))
        SendKeys "^a"
        Application.Wait (Now + TimeValue("00:00:01"))
        SendKeys "^c"
        Application.Wait (Now + TimeValue("00:00:01"))
        MyData.GetFromClipboard
        txt = MyData.GetText(1)

    ' version DOM
        page.body.innerHTML = txt
        For Each elem In page.getElementsByTagName("div")
            If elem.getAttribute("id") = "VL" Then Sheets(1).Cells(ligne, 2) = elem.innerHTML
        Next

    Next

    fin
    Application.Wait (Now + TimeValue("00:00:02"))
    AppActivate fenetre & " - Excel"

End Sub

Sub fin()
    Open Environ("TEMP") & "\" & "fin" & ".htm" For Output As #1
        Print #1, "<html><body>Fin du traitement, retour sur excel ...</body></html>"
    Close #1
    ShellExecute 0, "open", Environ("TEMP") & "\" & "fin" & ".htm", vbNullString, "C:\TEMP\", 1 'SW_SHOWNORMAL
End Sub

Bonjour,

merci ça fonctionne quand je télécharge et exécute le fichier - et c'est une piste pour faire évoluer mon outil

Mais quand je copie/colle le code dans une nouvelle feuille, ça plante et je ne comprends pas pourquoi.

Bon dimanche,

Luc

image

Dans ce cas ajoute une référence

image

ou bien définit plutôt comme ceci

Dim nav As Long, MyData As Object
Set MyData = New DataObject

Merci, je n'avais pas vu que l'activation des références s'applique au classeur et pas à l'application en général. Ca marche très bien maintenant.

Question suivante : j'ai moyen d'interagir quand je suis sur la page cible ? Par exemple de cliquer sur "Export" pour télécharger automatiquement mon rapport de stats sur Linkedin ?

image

Question suivante : j'ai moyen d'interagir quand je suis sur la page cible ? Par exemple de cliquer sur "Export" pour télécharger automatiquement mon rapport de stats sur Linkedin ?

C'est tout là le problème pour moi, et c'est ce qu'apportait Selenium.

Ce que je faisais "dans le temps", c'est envoyer des sendkeys pour naviguer dans le document et interagir ! en renseignant des données et en cliquant {ENTER} sur les boutons !

Bonjour le fil,

Désolé mais je verrouille le sujet, conformément à la charte du forum et à la réglementation du site indiqué, le scrapping est interdit sur Linkedin

8.2. À ne pas faire

Vous vous engagez à ne pas :

  1. créer une fausse identité sur LinkedIn, contrefaire votre identité, créer un profil de Membre pour n’importe qui d’autre que vous-même, ou utiliser ou tenter d’utiliser le compte d’un autre ;
  2. développer, prendre en charge ou utiliser des logiciels, des dispositifs, des scripts, des robots ou tout autre moyen ou processus (notamment des robots d’indexation, des modules d’extension de navigateur et compléments, ou toute autre technologie) visant à effectuer du web scraping des Services ou à copier par ailleurs des profils et d’autres données des Services ;
Rechercher des sujets similaires à "recuperation donnees scraping vba"