Condividi:        

[Excel] Query Web con link

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

[Excel] Query Web con link

Postdi mpsinf » 15/10/12 21:01

Ho una Query Web che mi preleva dei dati da un sito internet in costante modifica.
Importando la query in foglio Excel si possono impostare alcuni parametri tra cui la formattazione, impostando mantieni formatta zone HTML mi permette di visualizzare nelle varie celle importate i link alle sotto pagine del sito, ma non sò come fare per associare questi link ad una variabile in modo da poter estrarre il n. Contenuto nella stringa dell' url, che è il dato che mi interessa.
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Sponsor
 

Re: [Excel] Query Web con link

Postdi Anthony47 » 16/10/12 00:17

Non ho capito la richiesta, forse uno screenshot avrebbe aiutato (per come fare guarda qui: viewtopic.php?f=26&t=80395#p466013) e l' url di partenza.

Pero' in questi casi piu' che la web query credo che possano tornare utili gli strumenti di programmazione messi a disposizione dalla libreria mshtml.tlb, corrispondente nel vba al riferimento alla Microsoft Html Objrct Library.
Ad esempio potresti esaminare gli elementi link usando la funzione getElementsByTagName ("A"), per cercare il tuo link; i parametri per identificare quello che cerchi li potrai rilevare dal sorgente della pagina html.

Qualcosa in piu' forse conoscendo esattamente di quale url si tratta.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 16/10/12 18:34

Importando i dati della Query Web con l'impostazione della formattazione delle opzioni imostata su "FORMATTAZIONE HTML COMPLETA" invece di importarmi i semplici testi mi importa "il link in blu sottolineato".
Passando con il cursore sopra un link appare la finestra sfondo giallo con all'interno l'URL del link.. a me servirebbe quel testo messo in una cella (o variabile) per poterlo poi analizzare...

Se la tua idea reputi sia migliore potresti indicarmi qualche esempio... di strumenti di programmazion della libreria mshtmk.tlb e come si usa la funzione getElementsByTagName ecc...

grazie
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 17/10/12 02:23

Non posso fare un trattato di excel, dammi un url su cui lavorare e posso provare a spiegare.

La documentazione delle libreria mshtml.tlb la trovi qui: http://msdn.microsoft.com/en-us/library ... 85%29.aspx, voce MSHTML Reference (MSDN Library- Web Development- Internet Explorer Development- Hosting and Reuse)
Purtroppo e' un po' piu' criptica rispetto a quella che troviamo nell' help on line.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 17/10/12 18:08

Anthony47 ha scritto:Non posso fare un trattato di excel, dammi un url su cui lavorare e posso provare a spiegare.

La documentazione delle libreria mshtml.tlb la trovi qui: http://msdn.microsoft.com/en-us/library ... 85%29.aspx, voce MSHTML Reference (MSDN Library- Web Development- Internet Explorer Development- Hosting and Reuse)
Purtroppo e' un po' piu' criptica rispetto a quella che troviamo nell' help on line.

Ciao


La documentazione è in inglese e già il discorso è difficile in italiano.

Tanto per capirci meglio se digiti http://www.prezzipazzi.com ti ritrovi dei "box" che sono i link che mi interesserebbero e che vedi visualizzati in chiaro, se provi a visualizzare la pagina web con il comando VISUALIZZA e poi ORIGINE, ma poi con questa schermata di html non saprei come fare a salvarla e rianalizzarla in automatico

ti riporto qui sotto alcune righe

<div class="home-post-wrap" id="box_asta_70643__1" >
<div class="home-post-wrap-top">

quel "70643" così come gli altri id="box_..... è quello che vorrei importare in una tabella excel che poi con aggiorna
mi si riaggiornasse così come faccio ora con la query web "diretta"...

spero di essere stato il più possibile chiaro

grazie per la pazienza
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 18/10/12 00:54

Una macro come questa ti restituira' su Foglio3 del workbook attivo tutti gli id dei prodotti visualizzati (col A), la loro descrizione (col B) e un hyperlink alla pagina del prodotto (col C); queste colonne vengono pulite all' inizio senza nessun preavviso.
Codice: Seleziona tutto
Sub ppazzi()

myURL = "http://www.prezzipazzi.com/"
Set IE = CreateObject("InternetExplorer.Application")
   
Sheets("Foglio3").Select
Range("A:C").Clear
   
With IE
    .navigate myURL
    .Visible = True
    Do While .Busy: DoEvents: Loop    'Attesa not busy
    Do While .readyState <> 4: DoEvents: Loop 'Attesa documento
End With

myStart = Timer
Do
    DoEvents
    If Timer > myStart + 3 Or Timer < myStart Then Exit Do
Loop

'cerca ed elenca Id e Descrizioni
Set myColl = IE.document.getElementsByTagName("a")
For Each myLink In myColl
    LTit = myLink.Title
    LLin = myLink.href
    If LTit <> "" And Len(LLin) = 17 + Len(Replace(Replace(LLin, "/prodotto/", ""), ".php?id", "")) Then
        Cells(I + 1, 1) = Mid(LLin, InStr(1, LLin, ".php?id", vbTextCompare) + Len(".php?id"), 99)
        Cells(I + 1, 2) = LTit
'        Cells(I + 1, 3) = LLin
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(I + 1, 3), Address:=LLin, _
            TextToDisplay:=LLin

        I = I + 1
    End If
Next myLink

'aaa = IE.document.body.outerHTML
'Cells(1, 6) = aaa

Stop     '<<< Vedi testo
'Chiusura IE
IE.Quit
Set IE = Nothing

End Sub

La macro si interrompe lasciando la pagina Internet Explorer ancora aperta per consentire una verifica di quanto estratto; puoi tranquillamente "commentare" o cancellare la riga Stop.

Quanto sopra usa dettagli leggibili nel sorgente html; niente garantisce che questi dettagli non verranno cambiati stanotte, o a fine settimana, o a fine mese; insomma la macro sara' da aggiornare di tanto in tanto. Considera pertanto questo lavoro come soltanto come un prototipo dimostrativo.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 19/10/12 18:55

Apprezzando molto lo sforzo fatto per il sottoscritto avrei preferito anche qualche commento che senz'altro aiuta noi neofiti a comprendere il significato delle istruzioni. In particolare ho capito che sei andato ad analizzare il codice html (che penso sia quello che visualizzo dal sito web se selezione "visualizza origine".
Mi spiegheresti che tipo di ricerca hai fatto con quel If LTit <>" and ecc. 17+ Len (replace ecc. ecc.) ?
Per la colonna 3 ho visto che hai lasciato la possibilità di visualizzare solo il testo ho anche il link

grazie ancora

P.S. cosa mi consigli per imparare i numerosissimi comandi che VBA permette ?...
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 21/10/12 00:07

E' un "prototipo" dimostrativo non a uso didattico :D
Volevo farti capire come cambiando approccio (rispetto alla query web) potrebbe essere forse piu' facile estrarre dati; dico "forse" perche' non ho ancora capito in concreto che cosa devi fare, e comunque questo presuppone la tua conoscenza discreta della libreria mshtml.tlb perche' il sorgente del sito sara' in continua evoluzione e la tua macro deve adattarsi in continuazione.
Vedi anche con quanto ti diro' sull' altra discussione.
Mi spiegheresti che tipo di ricerca hai fatto con quel If LTit <>" and ecc. 17+ Len (replace ecc. ecc.)
LTit e' il "Titolo" del link; LLnk e' il link vero e proprio; l' istruzione successiva controlla che il link contenga "/prodotto/" e ".php?id", se Si allora vengono elencati Id (contenuto in LLnk) , Descrizione (LTit), e il link (LLnk).

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

Re: [Excel] Query Web con link

Postdi mpsinf » 23/10/12 19:41

Immaginavo che non fosse ad uso dilettantistico... :roll:
ma cercavo di comprendere se così vai ad analizzare il file HTML orginale ?...
se dovessi invece analizzare il seguente URL www.bidfun.com e dovessi portare in Execel le righe che vanno dall 11 al 36 (della
pagina che si presenta cliccando dal sito WEB con visualizza originale, come procederesti ?
ho andresti sempre ad analizzare il codice simile con gli HREF che trovi a riga 42 ? che mi pare sia il "duplicato" delle righe precedenti.

grazie ancora per l'aiuto Approfondito
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 23/10/12 23:43

Intanto ribadisco: per prelvare le informazioni, la macro precedente esamina il sorgente della pagina web e preleva quello che serve usando le funzioni della libreria mshtml.tlb, linkata tramite l' istruzione Set IE = CreateObject("InternetExplorer.Application")

Nel sito http://www.bidfun.com si fara' la stessa cosa, in particolare si esamineranno solo le righe da 41 in poi (il "Body" della pagina html); vista la diversa organizzazione del codice sara' necessario modifcare la parte centrale della macro in
Codice: Seleziona tutto
'cerca ed elenca Id e Descrizioni
Set myColl = IE.document.getElementsByTagName("a")
For Each myLink In myColl
    LTit = myLink.Title
    LLin = myLink.href
    If LTit <> "ZZ" And Len(LLin) = 12 + Len(Replace(LLin, "/bin/detail/", "")) Then
        If Oldescr <> Mid(LLin, InStrRev(LLin, "/") + 1, 999) Then
            Oldescr = Mid(LLin, InStrRev(LLin, "/") + 1, 999)
            Cells(I + 1, 1) = Mid(LLin, InStr(1, LLin, "/bin/detail/", vbTextCompare) + Len("/bin/detail/"), 6)
            Cells(I + 1, 2) = Mid(LLin, InStrRev(LLin, "/") + 1, 999)
            ActiveSheet.Hyperlinks.Add Anchor:=Cells(I + 1, 3), Address:=LLin, _
                TextToDisplay:=LLin
            I = I + 1
        End If
    End If
Next myLink

'aaa = IE.document.body.outerHTML
'Cells(1, 6) = aaa

Stop     '<<< Vedi testo

La macro ha la stessa impostazione di quella precedente, con l' ovvia differenza di myURL (in testa) che sara' uno di questi valori a scelta:
Codice: Seleziona tutto
myURL = "http://www.bidfun.com/?force_cc=1"    '<<Sito Usa
myURL = "http://www.bidfun-it.com/"   '<< Sito Italia
myURL = "http://www.bidfun.com/"   '<< Sito da scegliere

e poi si sostituisce tutta la parte compresa tra
'cerca ed elenca Id e Descrizioni / Stop 'Vedi testo
con il codice listato sopra.

Una ripetizione finale: "Quanto sopra usa dettagli leggibili nel sorgente html; niente garantisce che questi dettagli non verranno cambiati stanotte, o a fine settimana, o a fine mese; insomma la macro sara' da aggiornare di tanto in tanto"

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

Re: [Excel] Query Web con link

Postdi mpsinf » 24/10/12 05:56

Vista la linearità dei dati della pagina pensavo fosse più comodo prelevare i dati dalla riga 11 alla 36.
Una curiostià, ma per Body dell'html intendi quello che vedo dal sito facendo visualizza originale, ho c'è un altro codice HTML ?
Te lo chiedo perchè vorrei capire un pò come il tuo suggerimento va ad analizzare la pagina richiesta e darti meno peso in futuro.

Grazie ancora
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 24/10/12 14:22

Il <body> nel linguaggio html e' "il corpo" del messaggio da rendere attraverso il browser; per maggiori informazioni sul linguaggio cerca uno dei tanti siti che si occupano di quel linguaggio (io spesso faccio riferimento a http://www.html.it/guide/guida-html).
Le righe iniziali del sorgente di http://www.bidfun.com non sono all' interno del <body> (nella mia interpretazione esse sono parametri che uno dei javascript usa per costruire sul nostro pc il vero sorgente da sottoporre al browser) quindi non sono intercettabili dall' automazione resa da mshtml.tlb, almeno io non ho trovato la chiave.

La conoscenza del linguaggio html e delle prestazioni della libreria mshtml e' fondamentale per lo sviluppo di queste automazioni, quindi sono le prime cose che dovresti approfondire (vedi anche link Microsoft nel mio messaggio del 17/10/12 03:23)

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

Re: [Excel] Query Web con link

Postdi mpsinf » 28/10/12 21:35

Ma ti è possibile inserire un pezzo del codice che sei andato ad analizzare con la macro che hai realizzato, per riuscire a capire come esegue la ricerca magari con qualche commento dettagliato per apprendere queste nuove funzioni (repliche ecc.).
Grazie
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 29/10/12 03:00

Questa e' la macro iniziale con commenti
Codice: Seleziona tutto
    Sub ppazzi()

    myURL = "http://www.prezzipazzi.com/"    'L' indirizzo di navigazione
    'adesso si crea un processo InternetExplorer
    Set Ie = CreateObject("InternetExplorer.Application")
       
    'Si pulisce l' area che sara' usata per i risultati
    Sheets("Foglio3").Select
    Range("A:C").Clear
       
    With Ie
        .navigate myURL     'si attiva la navigazione all' url indicato prima
        .Visible = True     'si rende visibile I.Explorer
        Do While .Busy: DoEvents: Loop    'Attesa not busy (di IE)
        Do While .ReadyState <> 4: DoEvents: Loop   'Attesa documento scaricato in IE
    End With

'Aspetto 3 secondi perche' non mi fido di ReadyState=4
    myStart = Timer
    Do
        DoEvents
        If Timer > myStart + 3 Or Timer < myStart Then Exit Do
    Loop

'cerca ed elenca Id e Descrizioni
    Set myColl = Ie.Document.getElementsByTagName("a")   'Crea una "collezione" dei tag="a"
    For Each myLink In myColl   'si controlla ogni elemento della collezione
        LTit = myLink.Title     '"Titolo" del link; corrisponde a Descrizione oggetto
        LLin = myLink.href      'href(cioe' url target) del link
    'ora verifico se il link contiene "/prodotto/" e ".php?id"
        If LTit <> "" And Len(LLin) = 17 + Len(Replace(Replace(LLin, "/prodotto/", ""), ".php?id", "")) Then
    'se SI e' uno di quelli che mi interessano: inserisco su foglio Id, Descrizione, url
            Cells(I + 1, 1) = Mid(LLin, InStr(1, LLin, ".php?id", vbTextCompare) + Len(".php?id"), 99)
            Cells(I + 1, 2) = LTit
    '        Cells(I + 1, 3) = LLin
            'inserisco url con associato hyperlink
            ActiveSheet.Hyperlinks.Add Anchor:=Cells(I + 1, 3), Address:=LLin, _
                TextToDisplay:=LLin
            I = I + 1
        End If
    Next myLink

    'aaa = IE.document.body.outerHTML
    'Cells(1, 6) = aaa

    Stop     '<<< Vedi testo
    'Chiusura IE
    Ie.Quit             'Chiudo IE
    Set Ie = Nothing    'libero la variabile IE

    End Sub

Questo e' un pezzo del codice html della pagina indirizzata, con i tag e gli attibuti che la macro va a cercare:
Codice: Seleziona tutto
<div class="home-post-wrap" id="box_asta_76983__0" >
<div class="home-post-wrap-top">
 
<div class="date">
<a href="/prodotto/iphone-5.php?id=76983" style="color:#ffffff;" title="iPhone 5 16GB">iPhone 5 16GB</a>         
</div>
</div>

Spero sia di qualche utilita', soprattutto spero di non averti indirizzato su una strada al momento troppo impervia.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 01/11/12 19:25

La strada in effetti è alquanto impervia ma penso che dovrò intrapprenderla perchè dopo questo problema che vado ad esporre non penso che ci sia altra strada.
Con il seguente codice vado ad visualizzare la web query di alcune pagine

Codice: Seleziona tutto
MyConn = "URL;http://www.bidfun-it.com/bin/detail/147079"
     
    With ActiveSheet.QueryTables.Add(Connection:=MyConn, _
        .Destination:=Range("AA1"))
        .Name = "www.google.it"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlSpecifiedTables ' non all perchè così mi selezione dopo le TABLES
        .WebFormatting = xlWebFormattingAll
        .WebTables = "6,9" ' così evito di importarmi tutta la pagina e visto che sono tutte uguali il risultato è corretto tranne :x  173905
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With


per tutte le seguenti pagine (174069, 174080, 174077 ecc. per innumerevoli pagine) il risultato è corretto

ma per la pagina link 173905 il risultato è diverso come se la pagina fosse stata impostata diversamente !?
vi pare possibile un problema di "programmazione" o diversità solo per questa pagina ?
come potrei risolverlo a parte importare tutti i campi della pagina
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 03/11/12 00:14

Purtroppo ora i link nominati nel messaggio precedente sono inutilizzabili; comunque e' assolutamente possibile che siti che modificano il contenuto ogni minuto (o anche meno) siano sfuggenti alla cattura dati: nei siti di scommesse mi pare che sia proprio voluto dal gestore ostacolare la raccolta e riorganizzazione dei dati, in quello di offerte on-line puo' essere dovuto a riposizionamento di prodotti in offerta.
E' inevitabile quindi inseguire, e la cosa e' meno difficile quando conosci sia gli strumenti della controparte (per la creazione di pagine dinamiche) sia quelli di propria disponibilita' (il vba e le "librerie" collegabili); io conosco quasi niente i primi, molto poco i secondi.
Comunque se segnali altri codici, sia diciamo "normali" che "anomali", e spieghi quale e' il comportamento diverso posso provare (compatibilmente con i miei tempi di reazione) a guardare se riesco a trovare un minimo comune multiplo accettabile.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 03/11/12 13:43

http://www.bidfun-it.com/bin/detail/173905

Guarda che funziona ed è ancora visualizzabile!!!

Se mi confronti la pagina sopra con questo altro link
http://www.bidfun-it.com/bin/detail/147079

e mi spieghi cosa cambia importando le due query web visto che quello che viene visualizzato con la restrizione qui sotto è differente per le 2 query
WebTables = "6,9" ' così evito di importarmi tutta la pagina e visto che sono tutte uguali il risultato è corretto tranne 173905

Quello che tu dici sulla "produzione" delle pagine da parte dei vari siti lo approvo completamente, quello che trovo stano è che su questo sito dove migliaia di pagine sono sempre state tutte uguali questa sia differente dalle altre. Ipotesi remota è che forse è un nuovo prodotto ?
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 03/11/12 17:49

Sono prodotti diversi, quindi e' ragionevole che abbiano una struttura dati diversa: a colpo d' occhio i "punti" non prevedono commenti e immagino che non prevedano nemmeno il consumo di "punti" per fare l' offerta.
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Query Web con link

Postdi Anthony47 » 03/11/12 18:29

Inoltre a me facendo la query con la macro pubblicata vengono restituite informazioni comparabili:
Immagine

Uploaded with ImageShack.us
Codice 173905 a sx, codice 147079 a dx.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 03/11/12 18:44

Mahh ?.. mistero ora ho riprovato e non mi da più il problema, ossia nella query web della 173905 sotto la parte finale
01/11/2012 19.13 .nami. €2.46 Manuale

(da questo punto in poi 2 righe sotto mi appariva)

"Il miglior display su un dispositivo mobile.

Tutto quello che fai con iPad passa sul suo incredibile display .... ecc. ecc.)

e mi creava problemi perchè avevo inserito dei dati ricavati con la macro di interrogazione .. (non avevo possibilità di metterli a fianco)

è possibile che ora sia cambiato ? infatti se ora vado su "modifica query" mi fa vedere le spunte verdi delle sezioni che avevpo spuntato con la macro (la 6 e la 9, corrette) ... ieri era selezionate altre sezioni e solo per questa pagina, le altre erano tutte OK (a decine e decine) ..

Secondo te da cosa può dipendere ? non penso che il programmatore sia andato a correggere una pagina errata ?
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Query Web con link":


Chi c’è in linea

Visitano il forum: Nessuno e 29 ospiti