Condividi:        

Estrazione tabelle internet...sempre più complicato

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

Estrazione tabelle internet...sempre più complicato

Postdi templare77 » 04/07/16 00:08

Ciao Antony 47!! Ho ancora bisogno del tuo aiuto!! :eeh:
Ti ricordi che tempo fa ti chiesi una macro per estrarre dati da un sito di statistiche calcio?
Bene ora mi ritrovo in difficoltà essendoci di mezzo javascript...

Ti posto un link di esempio http://www.betexplorer.com/soccer/norway/tippeligaen/

Come puoi vedere c'è la tabella principale (quella della classifica), che riporta le cinque voci: standings, form, over/under, HT/FT, Top scorers, ognuna delle quali è caratterizzata da tre sotto voci: Overall, Home, Away.

Non riesco a scrivere una macro che mi tiri fuori le tre sotto voci di Standing e Form......
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Sponsor
 

Re: Estrazione tabelle internet...sempre più complicato

Postdi Flash30005 » 04/07/16 03:40

Apri una nuovo file di Excel
Aggiungi altri 2 fogli (per default sono 3)
nel VBA incolla l'interma macro e poi avvia WebAggClassifica

Codice: Seleziona tutto
Sub WebAggClassifica()
mylinkG = "http://www.betexplorer.com/soccer/norway/tippeligaen/"
For FF = 1 To 5
Sheets(FF).Select
Select Case FF
Case 1
NNF = "Standing"
mylink = mylinkG
Case 2
NNF = "Form"
mylink = mylinkG & "standings/?table=form&table_sub=&ts=08bAq3xa&dcheck=0"
Case 3
NNF = "OU"
mylink = mylinkG & "standings/?table=over_under&table_sub=&ts=08bAq3xa&dcheck=0"
Case 4
NNF = "HTFT"
mylink = mylinkG & "standings/?table=ht_ft&table_sub=&ts=08bAq3xa&dcheck=0"
Case 5
NNF = "TopSc"
mylink = mylinkG & "standings/?table=top_scorers&table_sub=&ts=08bAq3xa&dcheck=0"
End Select

ActiveSheet.Name = NNF
Range("A:Z").ClearContents
Cells.NumberFormat = "@"
    Call GetTabbbSub2bis(mylink)

FineH = Int((Timer - Start) / 3600)
FineM = Int((((Timer - Start) / 3600 - FineH) * 3600) / 60)
FineS = Int(((Timer - Start) / 60 - FineM) * 60)
Next FF

End Sub

Sub GetTabbbSub2bis(ByVal myURL As String)
Set ie = CreateObject("InternetExplorer.Application")
   
With ie
    .navigate myURL
    .Visible = True
    Do While .Busy: DoEvents: Loop
    Do While .readyState <> 4: DoEvents: Loop
End With
'
myStart = Timer
Do
    DoEvents
    If Timer > myStart + 2 Or Timer < myStart Then Exit Do
Loop


I = Evaluate("=MAX((A1:K20000<>"""")*(ROW(A1:K20000)))") + 3

Set mycoll = ie.document.getElementsByTagName("TABLE")

For Each myItm In mycoll
Cells(I + 1, 1) = "Table# " & mytbi + 1: I = I + 1: mytbi = mytbi + 1
    For Each trtr In myItm.Rows
        For Each tdtd In trtr.Cells
            Cells(I + 1, J + 1) = tdtd.innerText
            J = J + 1
        Next tdtd
        I = I + 1: J = 0
    Next trtr
I = I + 1
Next myItm

ie.Quit
Set ie = Nothing
End Sub

Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Estrazione tabelle internet...sempre più complicato

Postdi templare77 » 04/07/16 04:49

Grazie mille Flash! Appena posso ti faccio sapere!
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Estrazione tabelle internet...sempre più complicato

Postdi templare77 » 04/07/16 14:08

Ciao Flash è quasi perfetta! Il quasi è per colpa mia ovviamente...

Nel foglio Standings mancano le tabelle Home e Away
Mentre negli altri fogli (esempio Form), come faccio ad estrapolare solo gli ultimi 5 risultati di Overall, Home ed Away invece che gli ultimi 10 o 15? Grazie mille!
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Estrazione tabelle internet...sempre più complicato

Postdi templare77 » 04/07/16 22:23

Il mio intento è in pratica di navigare in diverse pagine dei vari campionati e per ognuna di esse, scaricare le informazioni di cui prima, ma non riesco a capire in quale anfratto dell'oggetto myitem si trovino i riferimenti....help me PLEASE!!!
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Estrazione tabelle internet...sempre più complicato

Postdi Flash30005 » 04/07/16 22:25

Aggiungi altri due fogli portandoli a 7
poi sostituisci solo la macro "WebAggClassifica"

Codice: Seleziona tutto
Sub WebAggClassifica()
mylinkG = "http://www.betexplorer.com/soccer/norway/tippeligaen/"
For FF = 1 To 7
Sheets(FF).Select
Select Case FF
Case 1
NNF = "Standing"
mylink = mylinkG
Case 2
NNF = "ST_Home"
mylink = mylinkG & "standings/?table=table&table_sub=home&ts=08bAq3xa&dcheck=0" 'Home
Case 3
NNF = "ST_Away"
mylink = mylinkG & "standings/?table=table&table_sub=away&ts=08bAq3xa&dcheck=0" 'Away
Case 4
NNF = "Form"
mylink = mylinkG & "standings/?table=form&table_sub=&ts=08bAq3xa&dcheck=0"
Case 5
NNF = "OU"
mylink = mylinkG & "standings/?table=over_under&table_sub=&ts=08bAq3xa&dcheck=0"
Case 6
NNF = "HTFT"
mylink = mylinkG & "standings/?table=ht_ft&table_sub=&ts=08bAq3xa&dcheck=0"
Case 7
NNF = "TopSc"
mylink = mylinkG & "standings/?table=top_scorers&table_sub=&ts=08bAq3xa&dcheck=0"
End Select


ActiveSheet.Name = NNF
Range("A:Z").Clear
Cells.NumberFormat = "@"
    Call GetTabbbSub2bis(mylink)

FineH = Int((Timer - Start) / 3600)
FineM = Int((((Timer - Start) / 3600 - FineH) * 3600) / 60)
FineS = Int(((Timer - Start) / 60 - FineM) * 60)
Next FF

End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Estrazione tabelle internet...sempre più complicato

Postdi templare77 » 04/07/16 22:39

si funziona alla grandissima!! Mi potresti dare l'ultima spinta per poter iterare questa ricerca in vari campionati? Dovrei trovare nell'oggetto myitem la stringa esatta che permetta di scaricare le mie informazioni. Per il campionato norvegese la statistica casalinga è questa ad esempio,"08bAq3xa&dcheck=0" . Ma per un altro campionato la stringa cambia...dove posso trovarla?
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Estrazione tabelle internet...sempre più complicato

Postdi templare77 » 05/07/16 04:31

Flash! Non ci riesco........come faccio a scovare in automatico la stringa del tag a href? <a href="/soccer/norway/tippeligaen/standings/?table=table&amp;table_sub=overall&amp;ts=08bAq3xa&amp;dcheck=0">Overall</a>

vorrei essere in grado di scovare queste stringhe ma non riesco.....quale ciclo for dovrei utilizzare in modo da leggerle?
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Estrazione tabelle internet...sempre più complicato

Postdi templare77 » 05/07/16 15:25

Ok penso di aver risolto con un ciclo foreach che mi va s vedere tutti i collegamenti ipertestuali!
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Estrazione tabelle internet...sempre più complicato

Postdi Anthony47 » 06/07/16 01:33

Lieto che hai risolto autonomamente.
Comunque se guardi il codice sorgente della pagina, troverai un <div id="glib-stats-submenu-table" class="submenu"> che all'interno contiene tre link rispttivamente per Overall, Home ed Away:
http://www.betexplorer.com/soccer/norwa ... a&dcheck=0
http://www.betexplorer.com/soccer/norwa ... a&dcheck=0
http://www.betexplorer.com/soccer/norwa ... a&dcheck=0

Dopo aver navigato fino all'url di partenza e stabilizzato il Busy e il ReadyState, ho estratto questi link con questo codice:
Codice: Seleziona tutto
Set mycoll = ie.document.getElementbyid("glib-stats-submenu-table")
    Set my2coll = mycoll.getElementsByTagName("a")
        For Each myItm In my2coll
            Debug.Print Timer & " >>> " & myItm.innertext
            Debug.Print Timer & " >>> " & myItm.href
        Next myItm

Innertext corrisponde alla descrizione, href corrisponde al link.

Ovviamente, se devi farne un uso successivo, invece del Debug.Print inserirai myItm.href in una variabile.

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

Re: Estrazione tabelle internet...sempre più complicato

Postdi templare77 » 06/07/16 03:52

Grazie Antthony! Ti posto la parte di codice da me scritta

Codice: Seleziona tutto

Set insieme = ie.document.getElementsByTagName("a")
i = 1
For Each Item In insieme
    If InStr(Item.href, "standings/?table=table&table_sub=overall&ts=") > 0 Or InStr(Item.href, "standings/?table=table&table_sub=home&ts=") > 0 Or InStr(Item.href, "standings/?table=form&table_sub=overall&ts=") > 0 Or InStr(Item.href, "standings/?table=form&table_sub=home&ts=") Then
       
        stringa_stats_casa(i) = Item.href
        i = i + 1
       
    End If

Next Item


Così nell'array stringa_stats_casa, mi memorizzo i link delle tabelle delle varie statistiche per poterle poi scaricare in un secondo momento.

Non ho capito bene il significato di questa istruzione invece...
Codice: Seleziona tutto
i = Evaluate("=MAX((A1:K20000<>"""")*(ROW(A1:K20000)))") + 3
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Estrazione tabelle internet...sempre più complicato

Postdi templare77 » 10/07/16 06:46

Buongiorno Flah ed Anthony! Una domanda.... Nel triplo ciclo For each arrivo alla cella iesima della colonna pincopallino secondo questo codice

Codice: Seleziona tutto
For Each myItm In mycoll
Cells(I + 1, 1) = "Table# " & mytbi + 1: I = I + 1: mytbi = mytbi + 1
    For Each trtr In myItm.Rows
        For Each tdtd In trtr.Cells


A questo punto se volessi estrarre uno o più link contenuti in questa cella, cosa dovrei scrivere al posto del punto interrogativo?

Codice: Seleziona tutto
For Each myItm In mycoll
Cells(I + 1, 1) = "Table# " & mytbi + 1: I = I + 1: mytbi = mytbi + 1
    For Each trtr In myItm.Rows
        For Each tdtd In trtr.Cells
.             For Each link In tdtd.(????)


Non riesco a capire quale proprietaria usare.... Vi ringrazio!
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Estrazione tabelle internet...sempre più complicato

Postdi templare77 » 10/07/16 20:40

Forse qualcosa ho scovato.... Una proprietà chiamata outerHTML...
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26

Re: Estrazione tabelle internet...sempre più complicato

Postdi Anthony47 » 12/07/16 01:25

A questo punto se volessi estrarre uno o più link contenuti in questa cella, cosa dovrei scrivere al posto del punto interrogativo?

Codice: Seleziona tutto
    For Each myItm In mycoll
    Cells(I + 1, 1) = "Table# " & mytbi + 1: I = I + 1: mytbi = mytbi + 1
        For Each trtr In myItm.Rows
            For Each tdtd In trtr.Cells
    .             For Each link In tdtd.(????)


Un ciclo For Each / Next presuppone di lavorare su una "collezione"; il codice che citi funziona perche' (lo ricordo a memoria) la variabile mycoll e' stata precedentemente associato a una collezione di Tables.
La Tabella e' una collezione di Rows; la riga e' una collezione di Cells.

La singola Cell non e' una collezione, quindi non vi puoi applicare un ciclo For Each.
Puoi pero' creare una collezione basandoti sul codice html dell'elemento; ad esempio:
Codice: Seleziona tutto
set myLColl = tdtd.getElementsByTagName("A")
for Each myLink in myLColl
     '
     'Qui che cosa vuoi fare
     '
Next myLink

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

Re: Estrazione tabelle internet...sempre più complicato

Postdi templare77 » 12/07/16 06:15

Grazie Anthony! Tutto chiaro!!!!
templare77
Utente Senior
 
Post: 153
Iscritto il: 18/04/16 06:26


Torna a Applicazioni Office Windows


Topic correlati a "Estrazione tabelle internet...sempre più complicato":


Chi c’è in linea

Visitano il forum: Nessuno e 32 ospiti