Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Prelevare dati da una pagina 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

Prelevare dati da una pagina web

Postdi Maury170419 » 13/02/18 13:21

Buon Giorno a tutti mi chiamo Maurizio
Capisco che sicuramente vi farò delle domande un pochino ripetitive, ma visto che prima di rivolgermi a voi , ho dato ben un occhiata su internet per vedere sè avessi trovato per lo meno un qualche cosa di analogo alla mia domanda .
Ma sfortunatamente ; Non sono riuscito a trovare nulla di Analogo.
Per qui la mia domanda e questa : Io per quel poco che ho imparato da voi sulle Pagine HTML ecc...!
Sono riuscito ad indirizzare ed Aprire una pagina Web che mi serve come Cartina Stradale ; E per fare questo ho inserito un codice del tipo :

Codice: Seleziona tutto
IE.Navigate


E fin qui tutto bene.
Il Problema che ora io vorrei riuscire a risolvere sarebbe questo : Io Vorrei che nelle celle del foglio di Excel ; E precisamente dalla Cella (A5:D9) Potessero comparire i dati della Cartina Appena Aperta.
C'è quanquno di voi che se la sentirebbe anche solo per le prime due voci ad Aiutarmi in tutto ciò.
Premetto che cio' provato e riprovato prima di approdare nuovamente da voi , ma nulla da fare.
Come sempre un Grazie per tutto l'aiuto che vorrete darmi in merito .
Saluti da A.Maurizio

Link Per Scaricare il mio Programma di prova è : https://app.box.com/s/1uwj4d6ydd1ovvf1daqijjamokhmalhe
Maury170419
Utente Junior
 
Post: 71
Iscritto il: 31/10/16 09:05

Sponsor
 

Re: Prelevare dati da una pagina web

Postdi Anthony47 » 14/02/18 01:14

Non capisco quali siano i dati di partenza... Inizialmente avevo pensato che fossero Latitudine /Longitudine, e stavo per proporti una Function che sfrutta le api google; poi invece e' diventato evidente che Lat e Long fanno parte anche loro del blocco di informazioni cercate, quindi mi sono perso.

Riepilogando: quali sono i dati di partenza?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 15793
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Prelevare dati da una pagina web

Postdi patel » 16/02/18 09:13

Ciao Anthony, traduco io la richiesta di Maurizio che ha postato anche su altro forum http://www.excelvba.it/forumexcel/forum ... ternativa/ e la cosa interessa anche a me.
Il dato di partenza è la città ed il link che ottiene i dati è
https://www.mapdevelopers.com/what-coun ... dress=Roma
si tratta di riportare su foglio Excel tutti i dati forniti dal sito
patel
Utente Senior
 
Post: 291
Iscritto il: 24/04/12 16:03

Re: Prelevare dati da una pagina web

Postdi Anthony47 » 17/02/18 01:28

Grazie patel per questo utile dettaglio...

Era mia intenzione rispondere con una mia realizzazione che usa alcune API di Google, ma ho scoperto che la politica Google e' cambiata recentemente per cui devo modificare i miei codici per l'inserimento di una chiave di autorizzazione.

Ripiego quindi sull'utilizzo del sito http://www.mapdevelopers.com.
Ho aggiunto al file originariamente fornito da Maury la Sub GetLocAddress, linkata anche al click del pulsante "Leggi Dettagli" che ho posizionato su Foglio1.

La macro passa al suddetto sito il contenuto di K1, poi aspetta i risultati e compila l'area la cui origine e' cablata nella macro (variabile OutAdd).

Il codice della Sub GetLocAddress, derivata da una delle tante automazioni tramite IE:
Codice: Seleziona tutto
Sub GetLocAddress()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=109422&p=642190#p642190
Dim IE As Object, F As Long, OutAdd As String
Dim myRColl, myDColl, KK As Long, I As Long, J As Long, myColl, myR, myTD
'
OutAdd = "G5"               '<<< Area 6 x 5 in cui saranno scritti i dettagli
'
Range(OutAdd).Resize(6, 5).NumberFormat = "@"
If Range("K1").Value = "" Then
    MsgBox ("Nessun indirizzo in K1; processo abortito")
    Exit Sub
End If
'myurl = "https://www.mapdevelopers.com/what-country-am-i-in.php?address=Roma"     '<<<<
myurl = "https://www.mapdevelopers.com/what-country-am-i-in.php"
Set IE = CreateObject("InternetExplorer.Application")
'
With IE
    .navigate myurl
    .Visible = True   'False
    Do While .Busy: DoEvents: Loop              'Attesa not busy
    Do While .readyState <> 4: DoEvents: Loop   'Attesa documento
End With
'
myStart = Timer                                 'attesa addizionale
Do
    DoEvents
    If Timer > myStart + 2 Or Timer < myStart Then Exit Do
Loop
Set myColl = IE.document.getElementById("search-form")
If Not myColl Is Nothing And Range("K1").Value <> "" Then
    myColl.getElementsByTagName("input")(0).Value = Range("K1").Value
    myColl.getElementsByTagName("input")(1).Value = Range("K1").Value
    myColl.getElementsByTagName("button")(1).Click
End If
Debug.Print "AAA", Timer
    Do While IE.Busy: DoEvents: Loop              'Attesa not busy
    Do While IE.readyState <> 4: DoEvents: Loop   'Attesa documento
Debug.Print "BBB", Timer
'Country;
Set myColl = IE.document.getElementsByClassName("row county-result")
Range(OutAdd).Offset(ir, 0).Value = myColl(0).getElementsByTagName("div")(0).innerText
Range(OutAdd).Offset(ir, 1).Value = myColl(0).getElementsByTagName("div")(0).innerText
ir = ir + 1
'Altri dettagli:
Set myColl = IE.document.getElementsByClassName("row expander")
For Each itm1 In myColl
    Set myDColl = itm1.getElementsByTagName("div")
    For Each itm2 In myDColl
        Range(OutAdd).Offset(ir, ic).Value = itm2.innerText
        ic = ic + 1
    Next itm2
    ir = ir + 1: ic = 0
Next itm1
    Range(OutAdd).Resize(6, 5).WrapText = False
    Range(OutAdd).Select
'
''Stop     'solo test

'Chiusura IE
IE.Quit
Set IE = Nothing
End Sub

L'istruzione marcata <<< identifica l'origine della tabella 6 x 5 che sara' usata dalla macro; adattare secondo le preferenze.

Aggiungo che in K1 puo' essere inserito una citta', un indirizzo, un esercizio commerciale, un point of interest, una istituzione; insomma qualsiasi cosa identificabile da google. E' una caratteristica delle Api google (usate dal suddetto sito).

Il file cosi' modificato e' reperibile qui: https://www.dropbox.com/s/cfrawhlf1xvy5 ... .xlsm?dl=0

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 15793
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Prelevare dati da una pagina web

Postdi patel » 17/02/18 09:11

Grazie Anthony, perfetto come sempre, non ci sarei mai arrivato
patel
Utente Senior
 
Post: 291
Iscritto il: 24/04/12 16:03

Re: Prelevare dati da una pagina web

Postdi patel » 17/02/18 11:44

Però la macro funziona soltanto se inserisco la città, non se metto città e indirizzo.
Se metto gli stessi dati sul sito invece funziona perfettamente
patel
Utente Senior
 
Post: 291
Iscritto il: 24/04/12 16:03

Re: Prelevare dati da una pagina web

Postdi Anthony47 » 19/02/18 01:32

Hummm.... Non mi torna quello che dici...
Ad esempio, in K1 scrivo: via roma 15, torino
Su Excel mi ritrovo:
+ Country + 15 Via Roma + Città Metropolitana di Torino + Torino + Piemonte (Piemonte) + 45.070293 + 10123 + 7.684398 +
(il "+" separa i campi: Country + Address + County + City + State + Latitude + ZipCode + Longitude)

K1: Bar Pietro, Torino
Esito: + Country + 34/F Via San Domenico + Città Metropolitana di Torino + Torino + Piemonte (Piemonte) + 45.076592 + 10122 + 7.675101 +

K1: Via Roma, Torino
Esito: + Country + + Provincia di Padova + Gazzo + Veneto (Veneto) + 45.582311 + 35010 + 11.713662 +
Ma questo e' quanto ottengo lavorando direttamente sul sito

K1: Via Regina Margherita, Torino
Esito: + Country + + Città Metropolitana di Torino + Torino + Piemonte (Piemonte) + 45.088072 + + 7.651021 +

K1: Via Mazzini 15, milano
Esito: + Country + 15 Via Giuseppe Mazzini + Città Metropolitana di Milano + Milano + Lombardia (Lombardia) + 45.461760 + 20123 + 9.188500 +

K1: IBM, Milano
Esito: + Country + + Città Metropolitana di Milano + Segrate + Lombardia (Lombardia) + 45.471737 + 20090 + 9.299773 +

K1: kremlin
Esito: + Country + + Moskva + Mosca + + 55.752023 + 103073 + 37.617499 +

Ho provato anche con la panetteria sotto casa, e mi ha dato l'indirizzo corretto... Tutto questo non e' una prestazione del sito www.mapdevelopers.com, ma delle Api google, che consentono di entrare nei dati del loro grande fratello (saranno 2-3 GByte... aggiunti ogni secondo); tant'e' che si ottengono anche con l'altra soluzione di cui avevo parlato, che appunto usano direttamente le Api google. Ho dovuto aggiungere alle query una mia chiave personale, non me la sento di diffonderla perche' la chiave e' visibile nel vba (non parlatemi di "proteggere il codice", tanto bastano 10 minuti su google) e quindi soggetta a possibile uso improprio.

TUTTAVIA ho notato che il tempo di attesa per IE.Busy e per IE.readyState <> 4 e' molto breve, potrebbe non riflettere il tempo veramente necessario per stabilizzare il documento e PC molto veloci potrebbero scaricare il doc di partenza.
Ho aggiunto quindi nel file una attesa addizionele di 0.1 sec dopo il click e 1 sec dopo la presunta situazione di IE.readyState = 4 ("document_complete"), per avere piu' garanzie sulla effettiva presenza del documento finale.
Quando dico "documento" faccio riferimento al contenuto html della pagina web.

Il file on line e' stato aggiornato con questi nuovi parametri.

Prova e in caso hai ancora problemi fammi un paio di esempi che falliscono, riportando il dato immesso in K1 e l' esito che leggi in H13

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 15793
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Prelevare dati da una pagina web

Postdi patel » 19/02/18 08:56

Ora funziona tutto, grazie di nuovo
patel
Utente Senior
 
Post: 291
Iscritto il: 24/04/12 16:03

Re: Prelevare dati da una pagina web

Postdi Maury170419 » 19/02/18 18:28

Ciao ad Entrambi gli Autori di questo Programma Patel e Anthony
E proprio vero che saper programmare e un arte che non tutti possono aspirare per bravi che siano.
E voi non solo siete bravi ma siete anche dei Geni.
Il Vostro Progetto e a dir poco Superlativo.
Grazie infinite.
(p.s) Però e vero che il vostro metodo non ha eguali a nessuno.
Però e anche vero che io nel tempo ho anche avuto dei valiti Maestri come voi.
Per qui in questi giorni mi sono rimboccato le maniche, e ho provato a modificare il mio progetto iniziale.
E devo dire che tutto sommato non e poi tanto male.
L'unico Handicap e che mi espone tutta questa Lista di Voci della città che desidero Trovare , in un unica Cella in Formato Verticale.
Però Ripeto Non e Male:
Praticamente Viene Fuori Come in Questa Foto
Immagine

Grazie Comunque Del Vostro Dispendio D Energie Saluti Sinceri da A.Maurizio
Maury170419
Utente Junior
 
Post: 71
Iscritto il: 31/10/16 09:05

Re: Prelevare dati da una pagina web

Postdi patel » 19/02/18 18:53

Ciao Maury, l'autore è soltanto Anthony, io mi sono limitato soltanto a spiegare cosa volevi ottenere visto che non gli era molto chiaro.
Comunque il difficile è estrarre i dati, la disposizione la puoi sempre fare a tuo piacimento
patel
Utente Senior
 
Post: 291
Iscritto il: 24/04/12 16:03

Re: Prelevare dati da una pagina web

Postdi Anthony47 » 19/02/18 23:38

Veramente, Maurizio, nel file che hai pubblicato c'e' (in Modulo1) una macro che dovrebbe importare dati da un sito di scommesse; non ho visto altro, quindi non ho potuto lavorare partendo dal tuo elaborato.

Comunque se fai una google search con le chiavi
Codice: Seleziona tutto
createobject internetexplorer site:pc-facile.com
troverai decine di casi di importazione di dati da siti web trattati dal nostro forum. Nell'ultima settimana ce n'erano attivi non ricordo se 3 oppure 4 contemporaneamente.

Comunque fai benissimo a ingegnarti nei progetti piu' vari, perche' e' solo cosi' che si imparano e si consolidano le conoscenze.

Alla prossima
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 15793
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Prelevare dati da una pagina web

Postdi Maury170419 » 22/02/18 16:05

Grazie Come Sempre Anthony
Anche per la Tua Proverbiale Spiegazione Tecnica al mio Caso.
E anche nuovamente un Grazie per l'onestà di Patel
Sinceri saluti a Tutti voi da A.Maurizio

(P.s) Magari per voi conterà nulla tutto ciò , ma io ci tenevo veramente tanto nel risolvere questo tipo di programma .
Per qui grazie del vostro Aiuto
Maury170419
Utente Junior
 
Post: 71
Iscritto il: 31/10/16 09:05


Torna a Applicazioni Office Windows


Topic correlati a "Prelevare dati da una pagina web":


Chi c’è in linea

Visitano il forum: Cele79, ikwae, PcBase e 29 ospiti