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

Re: [Excel] Query Web con link

Postdi Anthony47 » 03/11/12 18:52

Si trattava di una parte dei commenti, bisognava guardare in quel momento nel sorgente pagina come erano taggati i campi...
Purtroppo quei campi vengono creati sul nostro pc da un javascript ("http://wac.2bf5.edgecastcdn.net/802BF5/bidfun/common/common.js") sui parametri che trovi nei "text/javascript" successivi; insomma le variabili sono tante, e nessuna sotto il nostro controllo...

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

Sponsor
 

Re: [Excel] Query Web con link

Postdi mpsinf » 03/11/12 18:57

Ma è possibile che il sorgente pagina una volta creata venga alterato o modificato ? e solo in una pagina ?...
Poi il discorso "Purtroppo quei campi vengono creati sul nostro pc da un javascript " non l'ho molto capito da ignorante che sono.
Vuoi forse dire che io o voi potevate vedere la web query corretta in base all'interprete del javascript installato ?
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 19:08

La pagina viene creata ogni volta nel nostro pc, dal javascript all' url che ti ho linkato; non garantisco sulla bonta' di quello script.
Comunque solo l' esame di un problema concreto puo' portare a una ipotesi; cha da quella ipotesi scaturisca un possibile bypass e' tutto da vedere.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 09/11/12 06:43

Anthony47 ha scritto: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


Ciao


Dopo alcune prove e guardando il codice mi sono accorto che anche senza Ltit la macro gira comunque correttamente.
Perchè quel <> "ZZ" ?
Se dovessi estrarre più dati differenti dovrò fare tanti if then ?
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 » 09/11/12 13:22

La macro che hai quotato era l' evoluzione di quella piu' complessa che avevamo sviluppato precedentemente per prezzipazzi.it, che usava il "Titolo" del tag "<A>" e il contenuto del Link per determinare se i dati erano quelli da raccogliere o no.
Nella versione per bid4fum il Titolo non aveva piu' nessuna rilevanza, e per semplificarmi la vita ho impostato l' IF in quel modo semicomprensibile, che significa "qualsiasi sia il titolo, ed LLink contiene la stringa /bin/detail/ allora..."

In quanto alla domanda finale, la struttura del codice deve adattarsi al sorgente della pagina e all' obiettivo da raggiungere, non esiste una risposta specifica; in altro quesito (vedi viewtopic.php?f=26&t=97503) probabilmente ho dato un esempio di approccio.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 14/11/12 08:36

Anthony47 ha scritto:E' un "prototipo" dimostrativo non a uso didattico :D


Visto che l'uso didattico è servito molto nel mio apprendimento e ora lo gestisco abbastanza..
Volevo sapere se ci fosse un sistema più semplice, senza verifiche dei tag ecc., per controllare se è presente nella pagina html un determinato testo presente solo una volta.
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 » 14/11/12 12:59

Sono contento...
Per quello che chiedi puoi usare ".body.innerText" e poi controllare se all' interno esiste la stringa; ad esempio
Codice: Seleziona tutto
myDoc = Ie.Document.body.innertext
LFor = "lollino"    '<<< La stringa da controllare
LForExist = Len(myDoc) = (Len(LFor) + Len(Replace(myDoc, LFor, "")))

In LForExist troverai Vero o Falso a seconda che la stringa definita sia presente 1 volta o non sia presente; sii conscio della possibilita' che una stringa possa essere contenuta all' interno di altre parole; ad esempio se cerchi la stringa "pippo" ed e' presente invece "spippolato" otterrai Vero.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 14/11/12 19:04

Funziona alla grande .. grazie !!
Anche se vedere una riga
Codice: Seleziona tutto
 LForExist = Len(myDoc) = (Len(LFor) + Len(Replace(myDoc, LFor, "")))
con 2 uguali, io che sono ancora Junior mi crea :eeh: :o

Inoltre mi sono accorto di un problema utilizzando l'analisi del html invece della query web su foglio Excel. Quando analizzo il codice della pagina di cui estraggo piccola parte
Codice: Seleziona tutto
CLASS="legend">Tempo rimasto</P><P CLASS="smallprint"
e trovo "Tempo rimasto" non riesco ad estrarre il valore, perchè come di evince non è presente !!. Invece con la query web, nella cella a fianco, me lo visualizzava.
Soluzione per evitare di dover inserire anche la query web nel foglio ?
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 » 15/11/12 01:47

Se parli del sito prezzipazzi.it non ci sono al momento aste in corso quindi non sono in grado di vedere nel sorgente che cosa c' e' scritto; se e' un altro url allora pubblica il link.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 15/11/12 06:54

senza attendere che aprano le aste su prezzipazzi puoi fare un controllo qui

http://www.bidfun-it.com/bin/detail/175 ... -m305.html
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 » 15/11/12 14:04

Su questi siti bisogna "cogliere l' attimo", infatti anche il link che hai pubblicato e' oramai superato.
Provato con altro item al momento live, il suo sorgente contiene
Codice: Seleziona tutto
<TR>
<TD><P CLASS="legend">Tempo rimasto</P><P CLASS="smallprint">Ogni offerta costa 1 punto, aggiunge €0.01 al prezzo e 20 secondi al conto alla rovescia.</P></TD>
<TD CLASS="items_list_timebid"><P CLASS="center"><SPAN ID="bid_span_time_175203">02:52:35</SPAN></P><P STYLE="text-align:center"><A HREF="/bin/bid?item=175203&amp;return=%2Fbin%2Fdetail%2F175203%2Fscheda-di-memoria-kingston-8-gb-microsdhc-class-4.html" CLASS="bid_button">Fai un'offerta!</A></P></TD>
</TR>

Basta quindi esaminare il tag "TD" cercare quelli con classname pari a "items_list_timebid" e poi estrarre il tempo dall' innerText della cella (la cella infatti contiene anche il pulsante sottostante e relativo codice).

Anche su prezzipazzi.com c' e' una struttura idonea; ad esempio:
Codice: Seleziona tutto
<!--  <span  id='totale_85587'></span><br /> -->
<span class=grigio>Timer: 30 secondi</span><br />
<div id="timer_wrapper_85587">
<span id='contatore_85587' ></span><br />
<span class="prezzo" id='prezzo_85587' ></span><br />
<span id='vince_85587' ></span>
</div>
(nella home page)
Basta esaminare il tag "div", cercare i "timer_wrapper_xyz", leggerne l' innerText e fare il parse dei vari contenuti.
Oppure, su un oggetto:
Codice: Seleziona tutto
<!-- <span  id='totale_85587'></span><br /> -->
<span class=grigio>Timer: 30 secondi</span><br />
<span id='contatore_85587' ></span><br />
<span class="prezzo" id='prezzo_85587' ></span><br />
Risparmi il 96.61%<br /><span id='vince_85587' ></span><br />
Basta esaminare il tag "span", cercare i " contatore_xyz", leggerne l' innerText.

Insomma, al bisogno (se c' e') devi aguzzare l' ingegno.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 15/11/12 20:10

Vorrei capire perchè se con questo funzionava
Codice: Seleziona tutto
Set TagColl = Ie.Document.getElementsByTagName("TD")
For Each myTag In TagColl
   If Left(myTag.ID, 19) = "last_bids_datetime_" Or MyFound Then
     Range("D1").Offset(i, J) = myTag.innertext
        MyFound = True
        J = (J + 1) Mod 4
        i = i - 1 * (J = 0)
        If i > 9 Then Exit For ' Per uscire dal ciclo dopo aver acquisito i 10 dati
   End If
Next myTag


con questo invece non trova niente anche sè c'è un TD
Codice: Seleziona tutto
Set TagColl = Ie.Document.getElementsByTagName("TD")
For Each myTag In TagColl
MsgBox myTag.innertext
   If Left(myTag.ID, 14) = "bid_span_time_" Then
   MsgBox "OK"
   '  Range("B3") = myTag.innertext
   End If
 Next myTag


ed inoltre ho provato con l'estrazione Set TagColl = Ie.Document.getElementsByTagName("CLASS") ma anche qui nessun risultato ! :(
forse non ho ancora capito bene l'analisi come viene fatta .. consigli ?...
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 » 16/11/12 12:42

Per fare commenti che abbiano una ipotesi di attendibilita' dovrei conoscere a quale sorgente si applica quel codice e con quale obiettivo.
A caso, per ora, posso solo commentare che nei vari sorgenti che ho riportato io nel messaggio precedente non c' e' nessun TD che abbia un ID che inizia "bid_span_time_"

Per quanto riguarda getElementsByTagName("CLASS"), non credo che "class" sia, in html, un tag valido.
Per maggiori informazioni sul linguaggio html consulta uno dei tanti siti che si occupano di quel linguaggio (io spesso faccio riferimento a http://www.html.it/guide/guida-html).
Conoscere il linguaggio html (di cui io ho solo una conoscenza marginale) e' abbastanza importante per sviluppare queste automazioni.

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

Re: [Excel] Query Web con link

Postdi mpsinf » 16/11/12 12:58

http://www.bidfun-it.com/bin/detail/175 ... -m305.html

Qui parte del codice
</TD><TD CLASS="items_list_timebid"><P CLASS="center"><SPAN ID="bid_span_time_175295">05:03:13</SPAN></P><P STYLE="text-align:center"><A HREF="/bin/bid?item=175295&amp;return=%2Fbin%2Fdetail%2F175295%2Flogitech-wireless-mouse-m305.html"

Dopo il TD c'è Class ma il testo che cerco è dopo SPAN ID ...

Provo a fare un salto sul html.it per vedere se trovo qualcosa, se nel frattempo sai darmi una dritta ti ringrazio in anticipo..
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 » 16/11/12 13:05

mpsinf ha scritto:se nel frattempo sai darmi una dritta ti ringrazio in anticipo..

La dritta e' di accettare i suggerimenti che ti do:
Anthony ha scritto:Basta quindi esaminare il tag "TD" cercare quelli con classname pari a "items_list_timebid" e poi estrarre il tempo dall' innerText della cella (la cella infatti contiene anche il pulsante sottostante e relativo codice).
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Query Web con link

Postdi mpsinf » 16/11/12 20:15

Scusa ma è proprio questo che non riesco a fare, inoltre non capisco perchè mi vorresti far cercare quelli con classname quando ho l'ID con "bid_span_user_175171" per estrarre il tempo..

Codice: Seleziona tutto
Set TagColl = IE.Document.getElementsByTagName("TD")
For Each myTag In TagColl
   ' If Left(myTag.ID, 20) = "bid_span_user_175171" Or MyFound Then
    If Left(myTag.ID, 18) = "items_list_timebid" Or MyFound Then
   MsgBox myTag.ID
        Range("B10").Offset(i, 0) = myTag.innertext
        i = i + 1
        MyFound = True
   End If
Next myTag


A questo punto non capisco come agisce la macro sull'analisi e cosa analizza ... su html.it non ho trovato nulla a parte qualche spiegazione dei tag !..
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/11/12 00:01

Scusa ma è proprio questo che non riesco a fare
Ci avevi gia' provato?
inoltre non capisco perchè mi vorresti far cercare quelli con classname quando ho l'ID con "bid_span_user_175171" per estrarre il tempo..
Perche' funziona e perche' la stringa da cercare e' indipendente dall' oggetto trattato.
Ad esempio:
Codice: Seleziona tutto
'esamino la collezione di TD
Set myColl = Ie.Document.getelementsbytagname("TD")
For Each myItm In myColl
'Cerco quelli col ClassName che mi serve
    If myItm.className = "items_list_timebid" Then
        MsgBox myItm.innertext
    End If
Next myItm

Ottendo questo
Immagine

Uploaded with ImageShack.us
Ho usato come myUrl:
http://www.bidfun-it.com/bin/detail/175 ... 16-gb.html

Ma se vuoi puoi esaminare i tag Span e cercare quello che comincia con "bid_span_user_"

Html.it e' un sito che parla di html.
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: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Query Web con link

Postdi mpsinf » 17/11/12 06:57

Ci avevi gia' provato?

Certo.. Ora capisco cosa sbagliavo

If myItm.Class = "items_list_timebid" Then
e mi dava errore perché non ho capito il motivo che prima per l'altra ricerca facevo ID e ora CLASSname e non solo CLASS

Devo fare assolutamente qualcosa per sfruttare l'help che secondo me non mi funziona correttamente :x

Intanto ancora mille 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 mpsinf » 19/11/12 22:28

Anthony47 ha scritto: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.

Con l'analisi in continuo di siti web per la raccolta dati, mi succede di trovarmi nel task manager molti processi iexplorer.exe che vanno man mano ad esaurire la memoria disponibile di 3gb su xp, fino a quando poi la macro si impianta nella zona ie. C'è qualche sistema per evitarlo ?

Per quanto riguarda il tuo interesse, potrei cercare di descrivere cosa intendo fare, ma penso che richiederebbe una disquisizione lunghissima visto la complessità del progetto.
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 » 19/11/12 23:32

Le macro che ti ho proposte hanno la stessa struttura, salvo poi un "cuore" diverso, a seconda di che dati racogliere su quale sorgente.
Nel codice c' e' uno Stop, che (avevo scritto all' inizio) serviva solo per debug, cioe' a controllare la coerenza tra quanto estratto e quanto visibile sulla pagina IE. Dopo Stop ci sono le istruzioni che chiudono IE e quindi liberano anche la memoria.
Probabilmente invece tu interrompi le macro su Stop e la macro muore li; eliminando le righe Stop la cosa dovrebbe ovviamente scomparire.

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

PrecedenteProssimo

Torna a Applicazioni Office Windows


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


Chi c’è in linea

Visitano il forum: Nessuno e 48 ospiti