尝试从网站获取一些数据

我想从金融网站获得不同的价格,并将它们存储在Excel文件中。 我没有很好的知识,我想知道如果我从网站获取数据的代码是最好的,或者可以做得更好。 网站的HTML代码就是这个。 我想在103,74之后的“Prezzo di chiusura”之后的最后一个td。

我有这些问题:

  • 我使用了获取elementsbytagname(“td”)(39),我刚才统计了页面中的td号码,有没有更好的方法来解决这个td?
  • 我注意到,有时我有以前的价格,而不是我在网页上看到的,我的代码是否可以访问我在网页上看到的一个不同的区域数据,直到它没有更新,我只会看到以前的数据?

HTML代码是:

<div class="instruments_company_summary"> <table class="table-noborders"> <tr> <td class="table_label"> </td> <td> <div class="floatdx" style="padding-bottom:10px"> <div class="floatsx"> <div class="standard-button"> <a href="/it/strumenti/grafico/IT0004785355">Grafico</a> </div> </div> <div class="floatsx"> <div class="standard-button"> <a href="http://www.eurotlx.com/product-details/IT0004785355.pdf" target="_blank">Scheda</a> </div> </div> <div class="floatsx"> <div class="standard-button"> <a href="/it/strumenti/dettaglio/csv/IT0004785355">Scarica book</a> </div> </div> </div> </td> </tr> <tr> <td class="table_label">Isin</td> <td> <div class="floatsx" style="padding-top:4px;">IT0004785355</div> </td> </tr> <tr> <td class="table_label">Descrizione</td> <td>Bpvi 7% 29dc16</td> </tr> <tr> <td class="table_label">Prezzi aggiornati al</td> <td>09-11-2015 21:28:48</td> </tr> </table> <table> <tr> <th colspan="2">Book di negoziazione</th> </tr> <tr> <td class="table_label">Var</td> <td>0,05%</td> </tr> <tr> <td class="table_label" style="border:0">Book a 5 livelli</td> <td style="border:0; padding: 10px 0 5px"> <table> <thead> <tr> <th>Q.tà Acquisto</th> <th>Prezzo Acquisto</th> <th>Prezzo Vendita</th> <th>Q.tà Vendita</th> </tr> </thead> <tbody> <tr> <td>-</td> <td>-</td> <td>-</td> <td>-</td> </tr> <tr> <td>-</td> <td>-</td> <td>-</td> <td>-</td> </tr> <tr> <td>-</td> <td>-</td> <td>-</td> <td>-</td> </tr> <tr> <td>-</td> <td>-</td> <td>-</td> <td>-</td> </tr> <tr> <td>-</td> <td>-</td> <td>-</td> <td>-</td> </tr> </tbody> </table> </td> </tr> </table> <table> <tr> <th colspan="2">Dati ultimo contratto</th> </tr> <tr> <td class="table_label">Prezzo</td> <td>103,93</td> </tr> <tr> <td class="table_label">Quantità</td> <td>5.000</td> </tr> <tr> <td class="table_label">Data e ora</td> <td>09-11-2015 16:59:33</td> </tr> </table> <table> <tr> <th colspan="2">Dati giornalieri</th> </tr> <tr> <td class="table_label">Prezzo di chiusura</td> <td>103,74</td> </tr> 

Excel的VBA代码是这样的:

 Dim W As Worksheet: Set W = ActiveSheet Dim Objie As Object Dim xObj Set Objie = CreateObject("InternetExplorer.Application") Objie.Visible = False Objie.Navigate "http://www.eurotlx.com/it/strumenti/dettaglio/IT0004785355" While (Objie.Busy Or Objie.ReadyState <> 4) DoEvents Wend Set xObj = Objie.Document.getElementsByTagName("td")(39) W.Range("I3" ) = xObj.innerText Set xObj = Nothing Objie.Quit Set Objie = Nothing 

这样做会更好(隔绝以前表中的行数)

 Dim tbl, xObj Set tbl = Objie.Document.getElementsByTagName("table")(3) '4th table on page Set xObj = tbl.getElementsByTagName("td")(2) 'second td in that table 

您也可以search您想要的数据(“PREZZO DI CHUSURA”),并使用nextElementSibling属性获取给定的值。 这样,您可以始终确保所获得的价值与eurotlx.com提供的表结构无关。

 Sub Scrape() Dim ie As Object 'Get rid of cached sites Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255" Set ie = CreateObject("InternetExplorer.Application") ie.Visible = False ie.navigate "http://www.eurotlx.com/it/strumenti/dettaglio/IT0004785355" While (ie.Busy Or ie.ReadyState <> 4) DoEvents Wend Set tds = ie.document.getElementsByClassName("table_label") For Each TDelement In ie.document.getElementsByClassName("table_label") If InStr(TDelement.innerText, "Prezzo di chiusura") Then Range("I3") = TDelement.nextElementSibling.innerText Exit For End If Next End Sub 

当然,这种方法的弱点在于,如果网站pipe理员改变了“prezzo di chiusura”的innerText,Excel将无法find它的值。