Condividi:        

Ricavare dati da una pagina web senza usare Int.Explorer

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

Ricavare dati da una pagina web senza usare Int.Explorer

Postdi Maury170419 » 22/03/20 12:40

Ciao a tutti mi chiamo A.Maurizio
Sperò con questo mio nuovo post, di non far arrabbiare nessuno, in quanto : E vero che una domanda simile lo già inserita in un post precedente ; Però era di tutt'altro genere e concetto diverso.
pertanto la mia domanda e questa: I
o ho creato un programma che riesce ad Estrapolare i dati da una pagina web inerente hai (BTP) borsistici del Sole24 ore e il suo link e questo :

https://mercati.ilsole24ore.com/obbliga ... fresh_ce=1

E fin qui va tutto bene , in quanto mi scarica i suoi dati sul foglio 1 di excel.

Però Ieri pomeriggio ho fatto una scoperta poco piacevole In quanto : Provando nuovamente il tutto sul pc portatile che ha cone sistema operativo (Windows Vista) mi sono accorto che tale programma non funziona più
Però se il link lo trasferisco manualmente sul (Browser Opera )
Tale pagina si apre egregiamente.
Pertanto la mia domanda e questa : Ci sarebbe la possibilità di modificare il mio programma scritto in vba
In modo tale che anzichè sfrutta (Internet Explorer) per ricavare tutti i dati ; Possa usare un altro Browser magari predefinito in Partenza ?
Grazie per tutto l'aiuto che vorrete darmi in merito .
Saluti da A.Maurizio

(P.S) Questo e il Link per scaricare il mio progetto di prova :
https://app.box.com/s/58p9inpvtc93vtnivj7njze7ptlq036r

Premetto che sul foglio 1 Troverete già tutta la pagina ricavata dalla mia precedente ricerca, fatta con l'altro pc Desktop.
Questo solo per dimostrare che tale ricerca in parte mi funziona alla grande.
Tutto qui !
Nuovamente Grazie.
Maury170419
Utente Senior
 
Post: 159
Iscritto il: 31/10/16 09:05

Sponsor
 

Re: Ricavare dati da una pagina web senza usare Int.Explorer

Postdi Anthony47 » 22/03/20 18:07

Guarda, queste automazioni sono sempre un gioco a termine, nel senso che prima o poi qualcosa all'interno del sito cambia e rende necessario rifare il giochino daccapo.
Cambia poco che in questo caso l'elemento scatenante sia la non compatibilita' del sito con IE

Per Chrome so che esiste un componente chiamato Selenium in grado di rendere disponibile una interfaccia tra il browser e il vba, ma non ho mai deciso di provarlo, quindi non so anticipare i risultati.

Stasera scarichero' il tuo file e vedro' se si puo' procedere con qualche trucco
Intanto mi ricordi quale versione di Office usi?

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

Re: Ricavare dati da una pagina web senza usare Int.Explorer

Postdi Maury170419 » 22/03/20 20:51

Come Sempre Anthony Grazie di tutto per il tuo interessamento .
Poi per rispondere alla tua domanda :
Io uso Office 2007 della microsoft
e ho come sistema operativo Vindows Vista Premium a 32 bit
grazie
Fai pure con comodo non c'é Premura.
Saluti a te e famiglia.
Maury170419
Utente Senior
 
Post: 159
Iscritto il: 31/10/16 09:05

Re: Ricavare dati da una pagina web senza usare Int.Explorer

Postdi Anthony47 » 23/03/20 18:43

Sul mio Pc la tua macro si esegue correttamente, salvo che non allinea correttamente le colonne
Io utilizzo IE vers. 11, su Opzioni, tab Sicurezza, il livello di sicurezza e' impostato "Medio-Alto"

Quando si parla di "Tabelle", io invece che debuggare le macro degli altri preferisco proporre quella che solitamente raccomando io, cioe' questa:

Codice: Seleziona tutto
'   >>> RIGOROSAMENTE IN TESTA A UN MODULO STANDARD DEL VBA <<<
#If VBA7 Then
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub GetWebTables()
Dim IE As Object, IESh As Worksheet, FlEx As Boolean, myTim As Single
Dim I As Long, KK As Long, aColl As Object, myUrl As String, OCLen As Long
Dim myItm As Object, tRtR As Object, TdTd As Object, J As Long

'ATTENZIONE, il foglio che specifichi verra' azzerato all'avvio della macro
Set IESh = Sheets("ImportedTables")                         '<<< Il fpglio da usare per l'importazione
myUrl = "https://mercati.ilsole24ore.com/obbligazioni/titoli-di-stato/btp/3"  '<<< La pagina

'
If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")
With IE
    .Visible = True         '...
    .navigate myUrl         '...
    Sleep 100
    Do While .Busy: DoEvents: Sleep (20): Loop  'Attesa not busy
    Do While .readyState <> 4: DoEvents: Sleep (20): Loop 'Attesa document
End With
'
I = 0: KK = 1
IESh.Range("A:Z").ClearContents
IESh.Range("A:Z").NumberFormat = "@"            '<<< Importa tutte le colonne in formato Testo
myTim = Timer
'Wait for all Tables to assemple
Do
    Set aColl = IE.document.getElementsByTagName("TABLE")
    If aColl.Length > OCLen Then
        OCLen = aColl.Length
        FlEx = False
        myTim = Timer
    Else
        If FlEx And aColl.Length > 0 Then Exit Do           'Tables stable
        FlEx = True
    End If
    Debug.Print aColl.Length, Timer - myTim
    If Timer > (myTim + 5) Or Timer < myTim Then Exit Do    'or Timeout
    Sleep 500
    DoEvents
Loop
For Each myItm In aColl
'    If ... Then                        'Riserva...
        IESh.Cells(I + 1, "A").Value = "TABLE#_" & KK: KK = KK + 1: I = I + 1
        For Each tRtR In myItm.Rows
            For Each TdTd In tRtR.Cells
                IESh.Cells(I + 1, J + 1) = TdTd.innerText
                J = J + 1
            Next TdTd
            I = I + 1: J = 0
        Next tRtR
'    End If
    I = I + 1
Next myItm
'
On Error Resume Next
IE.Quit
Set IE = Nothing
MsgBox ("Tabelle importate: " & KK - 1)
End Sub

Essa importa nel foglio specificato tutte le "Tabelle" presenti sulla pagina web specificata
Ed e' pensata per funzionare su tutte le pagine web, purche' espongano i loro dati in formato di "html tables"

L'ho inserita nel tuo file in Modulo2, e l'ho usata per popolare i dati sul foglio ImportedTables; la nuova versione del file e' scaricabile qui: https://www.dropbox.com/s/l3i4nod6fwa1p ... .xlsm?dl=0

La macro cancella all'inizio tutto il contenuto delle colonne A:Z (non i Pulsanti o la formattazione)
Ho inserito una formattazione basica stile "tabella excel", puoi inserire anche formattazioni piu' sofisticate.

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

Re: Ricavare dati da una pagina web senza usare Int.Explorer

Postdi Maury170419 » 23/03/20 20:44

Ciao Anthony47
Grazie ancora di tutto ; Lo provato solo ora e va alla grande , si e aperto con Google .
Non smetterò mai di stupirmi e (Ribadire) quanto sei bravo e molto ben preparato.
Il Fatto è che Tra questo (Programma) e L'altro che mi hai dato solo L'altro giorno .
Mi ci vorrà come minimo un Anno intero ; Prima di riuscire a capire come hai fatto
Ha mettere tutti i pezzi al posto giusto , per estrapolare tutti i dati
Alla velocità della luce.
Ma questa e tutta un altra storia .
Per il momento ti dico grazie ti tutto .

¡Muchas gracias en el verdadero sentido de la Palabra!
Eres un verdadero amigo
Hola de A.Maurizio
Maury170419
Utente Senior
 
Post: 159
Iscritto il: 31/10/16 09:05

Re: Ricavare dati da una pagina web senza usare Int.Explorer

Postdi Anthony47 » 24/03/20 02:13

Gracias por los comentarios.

Il codice della GetWebTable sono anni che lo uso con piccoli aggiustamenti nel caso che voglia estrarre una tabella specifica; usa la collezione di Tables, che e' a sua volta una collezione di "TR = Rows", che a sua volta e' una collezione di "TD = Celle". Proprio per questa sua logica estrae Tabelle da ogni pagina.
La macro per i dati dell'infezione da coronavirus invece ho dovuto effettivamente cercarli col lanternino, perche' sulle pagine pubblicate non sono in forma di Tabelle

Alla prossima
Avatar utente
Anthony47
Moderatore
 
Post: 19439
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Ricavare dati da una pagina web senza usare Int.Explorer":


Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti