vba - Scraping dei dati dal sito web usando vba




1 Answers

Ci sono diversi modi per farlo. Questa è una risposta che scrivo sperando che tutte le basi dell'automazione di Internet Explorer verranno trovate quando si esplora le parole chiave "raggruppando i dati dal sito web", ma ricorda che niente vale come tua ricerca (se non vuoi rispettare Codici pre-scritti che non riesci a personalizzare).

Si prega di notare che questo è un modo che non preferisco in termini di prestazioni (perché dipende dalla velocità del browser), ma è bene comprendere la logica dietro l'automazione di Internet.

1) Se ho bisogno di navigare sul web, ho bisogno di un browser! Quindi creo un browser Internet Explorer:

Dim appIE As Object
Set appIE = CreateObject("internetexplorer.application")

2) Chiedo al browser di sfogliare la pagina web di destinazione. Attraverso l'utilizzo della proprietà ".Visible", decido se voglio vedere il browser che fa il suo lavoro o no. Quando si costruisce il codice è bello avere Visible = True , ma quando il codice sta lavorando per raschiare i dati è bello non vederlo sempre in modo Visible = False .

With appIE
    .Navigate "http://uk.investing.com/rates-bonds/financial-futures"
    .Visible = True
End With

3) La pagina web avrà bisogno di un po 'di tempo per caricare. Quindi, aspetto nel frattempo è occupato ...

Do While appIE.Busy
    DoEvents
Loop

4) Beh, ora la pagina è caricata. Diciamo che voglio raschiare la modifica del T-Bond US30Y: quello che farò è solo fare clic su F12 in Internet Explorer per vedere il codice della pagina web e quindi utilizzare il puntatore (in cerchio rosso) faccio clic sull'elemento che Voglio raschiare per vedere come posso raggiungere il mio scopo.

5) Quello che dovrei fare è andare avanti. Prima di tutto, otterrò dalla proprietà ID l'elemento tr che contiene il valore:

Set allRowOfData = appIE.document.getElementById("pair_8907")

Qui troverò una collezione di elementi td (in particolare, tr è una fila di dati e le td sono le sue celle. Stiamo cercando l'ottavo, quindi scriverò:

Dim myValue As String: myValue = allRowOfData.Cells(7).innerHTML

Perché ho scritto 7 invece di 8? Poiché le collezioni di celle iniziano da 0, quindi l'indice dell'ottavo elemento è 7 (8-1). Analizzando brevemente questa linea di codice:

  • .Cells() mi fa accedere agli elementi td ;
  • innerHTML è la proprietà della cella contenente il valore che cerchiamo.

Una volta che abbiamo il nostro valore, ora immagazzinato nella variabile myValue , possiamo chiudere il browser IE e rilasciare la memoria impostandolo a Nothing:

appIE.Quit
Set appIE = Nothing

Beh, adesso hai il tuo valore e puoi fare tutto ciò che vuoi: inseriscilo in una cella ( Range("A1").Value = myValue ) o in un'etichetta di un modulo ( Me.label1.Text = myValue ).

Vorrei solo sottolineare che non funziona così StackOverflow: qui si postano domande su problemi di codifica specifici, ma si dovrebbe fare la tua ricerca in primo luogo. Il motivo per cui sto rispondendo a una domanda che non sta dimostrando troppi sforzi di ricerca è proprio quello che lo vedo richiesto diverse volte e, al momento in cui ho imparato a farlo, mi ricordo che avrei voluto avere qualcosa di meglio Supporto per iniziare. Quindi spero che questa risposta, che sia solo un "input studio" e non in ogni modo la soluzione migliore / più completa, possa essere un supporto per il prossimo utente che ha il tuo stesso problema. Perché ho imparato a programmare grazie a questa comunità e mi piace pensare che tu e altri principianti potresti usare il mio contributo per scoprire il bel mondo della programmazione.

Godetevi la tua pratica;)

Im cercando di raschiare i dati dal sito web: http://uk.investing.com/rates-bonds/financial-futures via vba, come il prezzo in tempo reale, cioè tedesco 5 YR Bobl, US 30Y T-Bond, ho provato excel Query web, ma solo scrapes l'intero sito web, ma vorrei solo raschiare il tasso, c'è un modo per farlo?




Related