Tutorial Web scraping con Edge e anche con Chrome

Stato
Chiusa ad ulteriori risposte.

ges

Excel/VBA Expert
Amministratore
21 Giugno 2015
28.361
1.865
Como
2011MAC 365WIN
851
Ciao a tutti,
in questa mini guida cercherò di spiegare come importare dati dai siti web utilizzando il nuovo brower della Microsof Edge che pare tenda a sostituire Interenet Explorer (con Chrome i passaggi fino all'istallazione del Selenium basic sono uguali).
Innanzitutto bisogna procurarsi Selenium basic scaricandolo da QUI
Scarichiamo l'ultima versione pubblicata, nel momento in cui scrivo questa



Una volta scaricata la installiamo seguendo il wizard cliccando sempre su Next senza toccare nulla



Andiamo nella cartella dove è stato installato Selenium basic (...\AppData\Local\SeleniumBasic) e cancelliamo il file edgedriver.exe



Apriamo il browesr Edge e clicchiamo sui pallini in alto a destra e poi su Impostazioni



Clicchiamo poi su "Informazioni su Microsoft Edge"



... e annotiamoci la versione di Edge installata



Quindi andiamo sulla pagina di Microsoft Edge Developer, precisamente QUI
... e scarichiamo la versione uguale a quella del nostro Edge (nel mio caso quella che ho selezionato in rosso, ma nel vostro caso potrebbe essere diversa)



A questo punto estraiamo dalla cartella zippata il file msedgedriver.exe



Eliminiamo le prime due lettere del nome (da così msedgedriver.exe a così edgedriver.exe) poi lo copiamo e lo incolliamno nella cartella di SeleniumBasic nella quale avevamo eliminato l'altro con lo stesso nome (..\AppData\Local\SeleniumBasic).



Bene, ora siamo quasi pronti a usare Edge, manca il passaggio di attivare la libreria da Excel.
Apriamo Excel --> Visual Basic - Strumenti e clicchiamo su SeleniumType Library



Adesso siamo veramente pronti a usare Edge per il web scraping.
Faccio subito un esempio
Vado sul sito https://it.wikipedia.org/wiki/Pagina_principale
e voglio cercare per esempio le province d'Italia

Mi creo un variabile che chiamo con un nome di fantastia (esempio driver) e lo dichiaro New EdgeDriver (N.B. si possono usare i drivers generici: New WebDriver)
Quindi assegno al Get l'indirizzo da cercare
Visual Basic:
Sub esempio()
Dim driver As New EdgeDriver
    With driver
        .Get "https://it.wikipedia.org/wiki/Pagina_principale"


     End With
End Sub
Ispeziono la casella di ricerca di Wikipedia e vedo che ci sono diversi elementi (nella riga in blu)



Abbiamo il tag Input, poi id, type, name, placeholder, title .. insomma abbiamo solo l'imbarazzo della scelta
Scelgo di usare il name, il SendKeys mi permette di scrivere e quindi così



Devo adesso ispezionare il codice del pulsante



Eccolo in blu



Abbiamo anche qui diversi elementi, il più semplice mi sembra il name "go" al quale abbino l'evento Click quindi
Visual Basic:
 .FindElementByName("go").Click
Ecco che spunta la tabella con le province, ispezionando il codice vedo che il tag "table" è lagato a una classe; ho due scelte usare il tag "table" oppure la classe, scelgo la prima che più semplice da seguire
Con una variabile setto la tabella
Visual Basic:
Set tabella = driver.FindElementByTag("table")
Poi mi serve un ciclo per le colonne e per le righe per estrarre l'intera tabella, usando quindi i tag tr e td (per la spiegazione di questi codici vi rimando a qualche guida sul linguaggio HTML).

Alla fine questo è il codice semplificato
Visual Basic:
Sub esempio()
    Dim driver As New WebDriver
    Dim tabella As Object, r As Long, c As Integer
    With driver
         .Start "Edge", ""
        .Get "https://it.wikipedia.org/wiki/Pagina_principale"
        .FindElementByName("search").SendKeys "Province d'Italia"
        .FindElementByName("go").Click
        Set tabella = driver.FindElementByTag("table")
        For Each th In tabella.FindElementsByTag("tr")
            r = r + 1: c = 1
            For Each td In th.FindElementsByTag("td")
                Cells(r, c).Value = td.Text
                c = c + 1
            Next
        Next
    End With
End Sub
E questa la tabella estratta




Spero che con questo esempio e le immagini tutto possa essere stato chiaro.

Scaricando sempre Selenium basic con la procedura spiegata sopra e i driver di Crome (QUI) si può usare Chrome.

Si controlla la versione del proprio browser Chrome





Si va nel sito chromedrives.chromiun e si scarica la versione uguale a quella del browser installato (nel mio caso quella in rosso)





Si estrae il file .exe zippato e si sostituisce nella cartella di SeleniumBasic quello presente con lo stesso nome (..\AppData\Local\SeleniumBasic).



Si attiva la libreria SeleniumType Library come mostrato per Edge .. e siamo pronti a usare Chrome!!!
Il codice di sopra usato con Edge è praticamente uguale perchè Selenium usa gli stessi elementi e attributi.
Visual Basic:
Sub esempio()
    Dim driver As New ChromeDriver
    Dim tabella As Object, r As Long, c As Integer
    With driver
         .Start "Chrome", ""
        .Get "https://it.wikipedia.org/wiki/Pagina_principale"
        .FindElementByName("search").SendKeys "Province d'Italia"
        .FindElementByName("go").Click
        Set tabella = driver.FindElementByTag("table")
        For Each th In tabella.FindElementsByTag("tr")
            r = r + 1: c = 1
            For Each td In th.FindElementsByTag("td")
                Cells(r, c).Value = td.Text
                c = c + 1
            Next
        Next
    End With
End Sub

Vantaggi con Selenium:
1) ci sono tantissimi oggetti, elementi e procedure per cui è più facile estrarre i dati;
2) si possono estrarre i dati da qualsiasi sito anche quelli a cui non può accedere Internet Explorer

Svantaggi:
1) Il file con il codice può essere usato (almeno con Excel) solo scaricando il Selenium Basic e Edge (o Chrome) e attivando la relativa libreria (con uso early bindind, altrimenti si crea con Set driver = CreateObject("Selenium.WebDriver") con uso late binding), per cui se il file viene usato da un utente che non ha scaricato questi componenti non funziona.
 
Ultima modifica:

emilio65

Nuovo utente
27 Ottobre 2020
2
3
excel 2016
0
Volevo segnalare che anche il browser OPERA può essere utilizzato con EXCEL attraverso il SeleniumBasic per mezzo dell'operadriver.exe che si scarica dal sito https://github.com/operasoftware/operachromiumdriver/releases in base alla versione del browser OPERA installato nel PC.

Solo FireFox sembra non si riesca a far funzionare attraverso SeleniumBasic (oltre a Safari per chi non ha un MAC).

Il codice dovrà essere modificato come segue:

Dim driver As New WebDriver
Dim tabella As Object, r As Long, c As Integer
With driver
.Start "Opera", ""
ecc. ecc.
 
Stato
Chiusa ad ulteriori risposte.

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!