Condividi:        

Riportare su Excel dati sito web

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Riportare su Excel dati sito web

Postdi giovannib87 » 12/01/21 03:05

Ciao ragazzi e piacere di iniziare a far parte di questa community.
Nella mia testa ho un progetto ma non l'ho mai portato avanti perchè con le macro Excel sono negato. :)
Magari col vostro prezioso aiuto ci riesco.
Vi spiego:

Il sito in questione è : http://www.soccer-rating.com
Prendiamo ad esempio la seguente scheda http://www.soccer-rating.com/Chorley-FC/2232/
Per ogni gara, dovrei riuscire ad importare la riga "Form Last 3 Games" e (possibilmente) la riga "Available Odds Rating (AO)"
E poi, una volta importati, selezionare le gare in base ad dei parametri. Ma questo viene dopo; al momento farei salti di gioia se avessi i dati in Excel.

Grazie a tutti :)
giovannib87
Utente Junior
 
Post: 16
Iscritto il: 12/01/21 02:49

Sponsor
 

Re: Riportare su Excel dati sito web

Postdi Anthony47 » 12/01/21 18:15

Intanto "Benvenuto nel forum"

Quanto al quesito, dovresti spiegare (partendo dal secondo link che hai inserito) dove sono le partite di cui parli e come si accede alle informazioni che vorresti estrarre

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riportare su Excel dati sito web

Postdi giovannib87 » 12/01/21 18:29

Grazie del benvenuto :)

Allora: le partite potrebbero essere prese da qui http://www.soccer-rating.com/football-country-ranking/
Per ogni paese, andare a spulciare le varie leghe ed accedere alla scheda della partita.

Una via più semplice, credo, sarebbe da qui http://www.soccer-rating.com/strange_od ... rpoints=10
La lista delle partite (anche se non sono tutte) è già pronta... Basterebbe solo accedere alla scheda di ogni partita.

Ciao e grazie
giovannib87
Utente Junior
 
Post: 16
Iscritto il: 12/01/21 02:49

Re: Riportare su Excel dati sito web

Postdi giovannib87 » 12/01/21 19:02

Allego anche una sorta di schemino su come sarebbe utile avere i dati su excel https://ibb.co/xXrNZB6

La seconda tabella sarebbe top per poi fare la selezione delle partite.
giovannib87
Utente Junior
 
Post: 16
Iscritto il: 12/01/21 02:49

Re: Riportare su Excel dati sito web

Postdi Anthony47 » 12/01/21 22:33

Allora...
Immagine

Mi immagino che "le partite" siano in questo elenco (es CA Bragantino vs Atletico-MG); bene, dove sono invece le "schede partite"? Una volta arrivato alle "schede partite" immagino che sara' a prova di stupido trovare le righe "Form Last 3 Games" e "Available Odds Rating (AO)"

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riportare su Excel dati sito web

Postdi giovannib87 » 13/01/21 00:03

Perdonarmi. Forse mi sono spiegato male io.

Aprendo il link http://www.soccer-rating.com/strange_od ... rpoints=10 si ha la "lista delle partite". La lista può variare ogni ora. Tale lista non è completa ma andrebbe cmq bene.
Cliccando sulla singola squadra (es. Club Celaya) si ha la "scheda della partita" relativa a "Club Celaya -Tepatitlan de Morelos" e così via.
E poi si, nella "scheda partita" si trovano le righe che mi interessano particolarmente ovvero "Form Last 3 Games" e "Available Odds Rating (AO)"
giovannib87
Utente Junior
 
Post: 16
Iscritto il: 12/01/21 02:49

Re: Riportare su Excel dati sito web

Postdi Anthony47 » 13/01/21 13:52

Questi sono giochi di tempo e di pazienza; merce rara, dalle mie parti...
In piu' funzionano "a tempo"; cioe' puo' smettere di funzionare correttamente in qualsiasi momento il proprietario del sito decidesse di apportare qualche modifica alla struttura delle sue pagine.

Cio' detto, con un po' di tempo e di pazienza ho prodotto questo codice, da inserire in un nuovo modulo standard del tuo vba:
Codice: Seleziona tutto
#If VBA7 Then       '!!! ON  TOP  OF  THE  VBA  MODULE   !!!!
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub GetSR()
'Dim IE As MSHTML, AColl As IHTMLElementCollection
Dim IE As Object, AColl As Object, I As Long, tdColl As Object
Dim myUrl As String

Dim Resp As Long, HRArr(), aInd As Long, J As Long
'
Sheets("DaWeb").Select                                  '<<< Il foglio dove saranno importate le informazioni
'
Range("A2").Resize(1000, 8).ClearContents
myUrl = "http://www.soccer-rating.com/strange_odds.php?show=1&rpoints=10"
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
Resp = GimmePage(myUrl, IE)
If Resp <> 0 Then Stop
Set AColl = Nothing
On Error Resume Next
Set AColl = IE.document.getElementsByClassName("bigtable")(0).getElementsByTagName("TR")
Debug.Print "AA: " & AColl.Length
On Error GoTo 0
'
ReDim HRArr(1 To AColl.Length)
For I = 0 To AColl.Length - 1
    Set tdColl = AColl(I).getElementsByTagName("td")
    For J = 0 To tdColl.Length - 1
   
        If InStr(1, tdColl(J).outerHTML, "a href=", vbTextCompare) > 0 Then
            aInd = aInd + 1
            HRArr(aInd) = tdColl(J).getElementsByTagName("a")(0).href
            Debug.Print aInd, HRArr(aInd)
            Exit For
        End If
    Next J
Next I
For I = 1 To aInd
    Resp = GimmePage(HRArr(I), IE)
    Set AColl = IE.document.getElementsByClassName("bigtable")(3)
    Set tdColl = AColl.getElementsByTagName("td")
    mySplit = Split(AColl.innerHTML, "<td>", , vbTextCompare)
    Cells(I + 1, "A").Value = tdColl(0).innerText
    Cells(I + 1, "B").Value = tdColl(1).innerText
    Cells(I + 1, "C").Value = tdColl(2).innerText
    For J = 3 To tdColl.Length - 1 ' UBound(mySplit)
        If InStr(1, tdColl(J).outerHTML, "Last 3 Games", vbTextCompare) > 0 Then
            Cells(I + 1, "D").Value = tdColl(J + 1).innerText
            Cells(I + 1, "E").Value = tdColl(J + 2).innerText
            Debug.Print I & "-A-" & J, tdColl(J + 1).innerHTML
        ElseIf InStr(1, tdColl(J).outerHTML, "Available Odds", vbTextCompare) > 0 Then
            Cells(I + 1, "F").Value = tdColl(J + 1).innerText
            Cells(I + 1, "G").Value = tdColl(J + 2).innerText
            Debug.Print I & "-B-" & J, tdColl(J + 1).innerHTML
        End If
    Next J
DoEvents
Next I
MsgBox ("Importate " & I - 1 & " righe")
IE.Quit
Set IE = Nothing
End Sub



Function GimmePage(ByVal LUrl As String, LIE As Object) As Long
Dim mTim As Single
    With LIE
        .navigate LUrl
        mytim = Timer
        Sleep 100
        Do
            Sleep 30
            If .busy = False And .readyState = 4 Then Exit Do
            If Timer > (mytim + 10) Then
                If .readyState <> 4 Then GimmePage = 10
                If .busy Then WaitPage = GimmePage + 1
                Exit Do
            End If
        DoEvents
        Loop
    End With
End Function


L'istruzione marcata <<< serve a indicare quale foglio va utilizzato per i risultati; le colonne A:H verranno azzerate senza preavviso prima di importare le nuove informazioni.

Il layout dei risultati sara' del tipo:
Immagine

Layout diversi possono essere ottenuti partendo da questa tabella

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riportare su Excel dati sito web

Postdi giovannib87 » 13/01/21 16:19

Tu sei un autentico GENIO!
Non ho ancora provato il codice perchè devo capire come usare il vba su Excel :) ma ti volevo ringraziare infinitamente da subito.
Ti farò sapere...
GRAZIE GRAZIE GRAZIE!
giovannib87
Utente Junior
 
Post: 16
Iscritto il: 12/01/21 02:49

Re: Riportare su Excel dati sito web

Postdi Anthony47 » 13/01/21 17:08

Per inserire il codice nel tuo "progetto vba" vedi viewtopic.php?f=26&t=103893&p=647675#p647675

La macro da eseguire e' la Sub GetSR; impieghera' parecchi minuti prima del completamento che sara' segnalato da un messaggio.
Per eseguire una macro: viewtopic.php?f=26&t=103893&p=647678#p647678
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riportare su Excel dati sito web

Postdi giovannib87 » 13/01/21 23:14

La soluzione sarà banale ma io non ci riesco...
Una volta avviata la macro mi dà "errore runtime 9 indice non incluso nell'intervallo"

Ho fatto il debug e l'errore è sulla riga "Sheets("DaWeb").Select '<<< Il foglio dove saranno importate le informazioni"
Ho inserito "Foglio1" ma nulla...
Grazie :)
giovannib87
Utente Junior
 
Post: 16
Iscritto il: 12/01/21 02:49

Re: Riportare su Excel dati sito web

Postdi Anthony47 » 14/01/21 00:36

Devi inserire il nome di un foglio presente nel tuo file; va bene "Foglio1", se Foglio1 e' presente.

Il file dove ho fatto le prove puo' essere scaricato qui: https://www.dropbox.com/s/rwntklqlh32zk ... .xlsm?dl=0

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riportare su Excel dati sito web

Postdi giovannib87 » 14/01/21 01:35

Si, mettevo "Foglio1" al posto di "DaWeb" ma ... mi genera l'errore " runtime 9 indice non incluso nell'intervallo"

Ho provato il tuo file e mi restituisce : "Errore runtime 429 - Il componente ActiveX non è in grado di creare l'oggetto"
Uso Office 2016 Standard

Aggiornamento: Tutto ok. Avevo IE disabilitato.
Lo sto provando e ti farò sapere!
Grazie
giovannib87
Utente Junior
 
Post: 16
Iscritto il: 12/01/21 02:49

Re: Riportare su Excel dati sito web

Postdi giovannib87 » 14/01/21 02:50

Allora, il file è pressochè geniale. Mi semplifica molto il lavoro e ti ringrazio davvero tanto.

Se possibile e non è troppo complicato da fare, sarebbe top fare una modifica.
Nelle colonne "Fl3G1" e "Fleg2" riportare solamente questi valore (7 - 3 nell'esempio) e lasciare perdere il resto:

Immagine

In moda tale che, nella colonna accanto, tramite la funzione SE mi vado a selezionare in automatico quelle gare in cui le due squadre hanno una differenza di 5 o più punti (P) nelle ultime 3 giornate giocate.
Ad esempio : Fl3g1 riporta il valore 1 e Fle3g2 riporta il valore 7, differenza +6 allora la partita è ok.
GRAZIE!
giovannib87
Utente Junior
 
Post: 16
Iscritto il: 12/01/21 02:49

Re: Riportare su Excel dati sito web

Postdi giovannib87 » 14/01/21 04:24

Amo smanettare e ci sono riuscito grazie a STRINGA.ESTRAI :)

Immagine

Ora, se la differenza in valore assoluto tra questi due valori (Colonna I e Colonna J) è pari o superiore a 5 mi farò restituire l'ok in automatico :D (sperando di trovare la giusta formula)
giovannib87
Utente Junior
 
Post: 16
Iscritto il: 12/01/21 02:49

Re: Riportare su Excel dati sito web

Postdi gimart » 14/01/21 08:47

Io ho provato a selezionare tutte le righe della pagina e ho scelto "copia", poi ho aperto Excel e ho selezionato "incolla". Mi sembra che l'operazione sia riuscita bene
gimart
Win 10 and Office 2010
Avatar utente
gimart
Utente Senior
 
Post: 1055
Iscritto il: 21/02/10 12:09

Re: Riportare su Excel dati sito web

Postdi Anthony47 » 14/01/21 15:09

Io mi fermo alle cose difficili :D poi con le formule o con altre macro anche autoregistrate si possono fare ulteriori elaborazioni, come le vostre esperienze dimostrano.

Volendo aggiungere qualche piccolo automatismo, nella revisione del file (disponibile allo stesso link gia' pubblicato) ho inserito la copia verso il basso di eventuali formule presenti da I2 verso destra, per tutto la lunghezza dell'elenco importato. A destra dell'ultima formula lasciare una colonna vuota.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riportare su Excel dati sito web

Postdi giovannib87 » 14/01/21 16:04

Allego qui il mio file ulteriormente modificato : https://www.dropbox.com/scl/fi/bg0mxbkk ... rj7sfrdctf

Ovviamente il pezzo forte del file è stato fatto dal mitico Anthony47!!!

Adesso mi chiedo: ad ogni nuovo aggiornamento dei dati, è possibile tenere in memoria il rosso relativo, ad esempio, alla partita tra Olimpia Tegucigalpa CD Marathon?
Mi spiego: ad ogni aggiornamento la riga (esempio) 31 cambia in quanto escono nuove partite e nuove righe. Però, la partita tra Olimpia Tegucigalpa CD Marathon è stata già messa in rosso. Una condizione della fuori uscita del rosso relativo a quella gara potrebbe essere il NO della cella L31 associato al testo presente in B31 e C31. Ecco, è possibile tenere traccia di questo?
Se è troppo complicato, no problem. Lo risegno rosso a mano :D
Già è fantastico così :D
giovannib87
Utente Junior
 
Post: 16
Iscritto il: 12/01/21 02:49

Re: Riportare su Excel dati sito web

Postdi Anthony47 » 14/01/21 23:53

Quanto proposto si occupa dell'estrazione dei dati dal sito web; la loro gestione va fatta separatamente su altro foglio.

Ad esempio puoi cercare nei dati scaricati le partite non ancora presenti nel tuo elenco ed aggiungerle, ma non ho nessun interesse ne' nel settore pronostici ne' nel settore calcio, quindi sono argomenti che maneggio con poco profitto.

Ho apportato una ulteriore modifica al codice della Sub GetSR, indirizzando in modo esplicito le celle del foglio di lavoro; infatti, vista la durata dell'importazione dati, c'era il rischio che una eventuale selezione di un diverso foglio di lavoro portasse la macro a scrivere su posizioni sbagliate.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Riportare su Excel dati sito web

Postdi giovannib87 » 15/01/21 00:14

Anthony47 ha scritto:Quanto proposto si occupa dell'estrazione dei dati dal sito web; la loro gestione va fatta separatamente su altro foglio.

Ad esempio puoi cercare nei dati scaricati le partite non ancora presenti nel tuo elenco ed aggiungerle, ma non ho nessun interesse ne' nel settore pronostici ne' nel settore calcio, quindi sono argomenti che maneggio con poco profitto.


Esatto. Vorrei poter raggiungere proprio questo, ovvero: le partite nuove si aggiungono al foglio (anche un foglio copia di DaWeb) in modo da non toccare le modifiche che si fanno sul foglio copia.
Anche se, ci sarebbe un problema forse: le partite di ieri non servono più e quindi andrebbe cmq eliminate.

Cmq ho risolto parzialmente con una soluzione relativamente veloce. Attraverso la formattazione condizionata delle righe in base al valore di una cella. Per il lavoro che devo fare io, è comodo ed anche abbastanza rapido

Anthony47 ha scritto:Ho apportato una ulteriore modifica al codice della Sub GetSR, indirizzando in modo esplicito le celle del foglio di lavoro; infatti, vista la durata dell'importazione dati, c'era il rischio che una eventuale selezione di un diverso foglio di lavoro portasse la macro a scrivere su posizioni sbagliate.

Ciao


Mi consigli di sostituirlo? Non noto problemi ed è anche abbastanza veloce.
giovannib87
Utente Junior
 
Post: 16
Iscritto il: 12/01/21 02:49

Re: Riportare su Excel dati sito web

Postdi Anthony47 » 15/01/21 13:00

Si, consiglio di sostituire il codice della Sub GetSR
Attenzione perche' la versione ora on line controlla se ci sono formule presenti da I2 verso destra e se le trova allora le copia verso il basso, mentre le colonne A:H vengono azzerate all'inizio della macro (fin dalla prima versione).
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Riportare su Excel dati sito web":


Chi c’è in linea

Visitano il forum: Anthony47 e 38 ospiti