Domanda Web scraping sito

dan888

Nuovo utente
16 Settembre 2019
10
1
firenze
2010
0
Buonasera,

vorrei prelevare da www.bet365.it ogni 2 minuti le statistiche live di determinate partite di calcio (attacchi, tiri ecc...) inserendoli in un database access inserendo nello stesso anche i minuti di gioco nel momento in cui sono state prese le statistiche e il relativo punteggio.

Mi date una mano indicandomi una macro VBA che possa fare questo.

Grazie
 

dan888

Nuovo utente
16 Settembre 2019
10
1
firenze
2010
0
Buongiorno,

si avevo già visto questa guida ma non fa al caso mio.

Ho trovato su questo forum una cosa del genere ma anche in questo caso non sono riuscito ad adeguarlo poichè ovviamente mi dà errore. Sotto riporto il codice trovato.

Codice:
Sub prova()
    Dim IE As New SHDocVw.InternetExplorer
    Dim ele As Object
    
    
    IE.Visible = True
    IE.navigate "https://www.bet365.it/?&cb=105802014563#/HO/"
    Application.Wait Now + TimeValue("00:00:03")
    Do Until IE.readyState = READYSTATE_COMPLETE
    Loop
    
    
    IE.document.getElementsByClassName("wn-Classification wn-Classification_Live ")(0).Click
    Application.Wait Now + TimeValue("00:00:03")
    
    
    Set ele = IE.document.getElementsByTagName("iframe")(0)
    
    
    Debug.Print ele.contentDocument.getElementsByTagName("body").Length
    
    IE.Quit
    
End Sub
Il primo problema è come trovare la pagina visto che nel sito bisogna selezionare la partita e senza caricamento della pagina a fianco appaiono le statistiche.
E poi ovviamente l'altro problema è trovare i dati che mi interessano

Potresti darmi una mano?
 

dan888

Nuovo utente
16 Settembre 2019
10
1
firenze
2010
0
inserendoli in un database access
Sposterei anche di sezione
il fatto di inserirli in un database diciamo che è un di più (che comunque viene in un secondo momento) poichè una volta prelevati i dati poi credo sia semplice inserirli nel database. Se avessi dei problemi poi ad inserirli apro una discussione nella sezione apposita. Per il momento vorrei cercare di prelevare i dati.
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.233
83
Italy
2013 2019
166
si avevo già visto questa guida ma non fa al caso mio.
Invece è proprio ciò che ti serve, perché quello è il punto di partenza.
Una volta fatto quello, poi, ogni pagina è unica e non esiste un metodo standard, bisogna analizzarla elemento per elemento, capirne la logica che lo sviluppatore ha applicato.

P.S. Il codice che hai trovato non è corretto, basta leggerlo per capirlo.
 
  • Like
Reactions: cromagno

dan888

Nuovo utente
16 Settembre 2019
10
1
firenze
2010
0
Invece è proprio ciò che ti serve, perché quello è il punto di partenza.
Ok seguo il tuo consiglio vediamo se riesco a trovare la soluzione. Però prima devo capire perché il seguente codice preso dalla guida indicata mi dà errore sui next. Ho provato a lasciare solo next togliendo il nome degli oggetti (HTMLA e Elem) e non mi dà nessun errore però non mi estrae nulla. Di seguito il codice:

Codice:
    Dim IE As New SHDocVw.InternetExplorer
    Dim Doc As MSHTML.HTMLDocument
    Dim HTMLAs As MSHTML.IHTMLElementCollection
    Dim HTMLA As MSHTML.IHTMLElement
    Dim Elem As MSHTML.IHTMLElement
    
    IE.navigate "https://it.wikipedia.org/wiki/Pagina_principale"
    IE.Visible = True
    Do While IE.Busy: DoEvents: Loop 'Attesa not busy
    Do While IE.readyState <> READYSTATE_COMPLETE: DoEvents: Loop 'Attesa documento


    Set Doc = IE.document
    Doc.forms("searchform").elements("search").Value = "Scraping web"
    Doc.forms("searchform").elements("go").Click
    Do While IE.Busy: DoEvents: Loop 'Attesa not busy
    Do While IE.readyState <> READYSTATE_COMPLETE: DoEvents: Loop 'Attesa documento
 
    Set HTMLAs = Doc.getElementsByClassName("mw-search-results")
    For Each HTMLA In HTMLAs
        For Each Elem In HTMLA.getElementsByTagName("li")
            Debug.Print Elem.innertext
        Next HTMLA
    Next Elem
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.233
83
Italy
2013 2019
166
Nel ciclo For/Each dopo il Next mi risulta che non si debba scrivere nulla (magari posso sbagliare).
Almeno io non ho mai scritto nulla (magari è facoltativo e non c'entra con l'errore).

Solo nei cicli For/Next si indica la variabile incrementale dopo il Next è obbligatoria.

però per capire bisognerebbe provare il tuo file.
 
Ultima modifica:

dan888

Nuovo utente
16 Settembre 2019
10
1
firenze
2010
0
Nel ciclo For/Each dopo il Next mi risulta che non si debba scrivere nulla (magari posso sbagliare).
Almeno io non ho mai scritto nulla (magari è facoltativo e non c'entra con l'errore).

Solo nei cicli For/Next si indica la variabile incrementale dopo il Next è obbligatoria.

però per capire bisognerebbe provare il tuo file.
In allegato il file
 

Allegati

cromagno

Excel/VBA Expert
Supermoderatore
Expert
9 Agosto 2015
6.656
183
39
Sardegna
2013 (64 bit)
232
Almeno io non ho mai scritto nulla (magari è facoltativo e non c'entra con l'errore).
E' facoltativo (sia per For... next che per For each... next) ma risulta utile quando ci sono più cicli annidati per identificare subito la variabile di quel determinato ciclo.

[EDIT]
ma vedendo il suo codice.... ha infatti sbagliato a mettere i nomi delle variabili che devono essere invertite.
 

Rubik72

Excel/VBA Expert
Supermoderatore
Expert
12 Dicembre 2015
5.634
183
47
Cosenza
Excel 2016
190
Un saluto a tutti.
Quoto quanto detto da cromagno @cromagno e mi scuso con tutti in quanto nel TUTORIAL ho inavvertitamente scambiato i cicli.
Errore correttocappello_saluta
 
  • Like
Reactions: cromagno

dan888

Nuovo utente
16 Settembre 2019
10
1
firenze
2010
0
ma vedendo il suo codice.... ha infatti sbagliato a mettere i nomi delle variabili che devono essere invertite.
Il problema è che quando avvio la sub cliccando sul pulsante all’interno del file che ho inviato in precedenza, non mi esce nessun errore infatti si apre la pagina web però poi sul foglio di calcolo non succede nulla.
 

dan888

Nuovo utente
16 Settembre 2019
10
1
firenze
2010
0
Sto facendo delle prove su altri siti per esercitarmi. Ho una domanda: per lo scraping è meglio aprire una sola pagina e lavorarci sulla stessa per tutto il tempo automaticamente (es. 1 ora utilizzando tempi di attesa), oppure finito il tempo di attesa conviene riaprire una nuova pagina e rieseguire le operazioni?
 

Rubik72

Excel/VBA Expert
Supermoderatore
Expert
12 Dicembre 2015
5.634
183
47
Cosenza
Excel 2016
190
Non c'è bisogno di eliminare una variabile oggetto e riaprirne un'altra.
Basta navigare sul nuovo indirizzo:
Codice:
IE.Navigate "nuovo indirizzo"
 

Sostieni ForumExcel

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