2012-08-04 49 views
0

我試圖從網站收集數據,一旦源代碼以字符串形式出現,就應該可以管理數據。環顧四周,我組裝了一些可能的解決方案,但遇到了問題,所有的人:從VBA中的HTML源代碼獲取數據(excel)

  1. 使用InternetExplorer.Application打開URL,然後訪問內部HTML
  2. 的Inet
  3. 使用Shell命令運行wget的

這裏是我有問題:

  1. 當我的innerHTML存儲到〜應變g,它不是整個源代碼,只有一小部分
  2. ActiveX不允許創建Inet對象(錯誤429)
  3. 我已將htm插入到計算機上的文件夾中,我如何獲取它VBA中的字符串?

代碼1:

子的getData() 昏暗URL作爲字符串,即作爲對象,狀態作爲整數 昏暗文本作爲變體,開始作爲整數,結束作爲整數

Set ie = CreateObject("InternetExplorer.Application") 
ie.Visible = 0 

url = "http://www.eoddata.com/stockquote/NASDAQ/AAPL.htm" 
ie.Navigate url 


state = 0 
Do Until state = 4 
    DoEvents 
    state = ie.readyState 
Loop 


text = ie.Document.Body.innerHTML 
startS = InStr(ie.Document.Body.innerHTML, "7/26/2012") 
endS = InStr(ie.Document.Body.innerHTML, "7/25/2012") 


text = Mid(ie.Document.Body.innerHTML, startS, endS - startS) 

MsgBox text 
+2

html文本有多大?你能向我們展示你使用的代碼和url嗎?我指的是第1點。 – 2012-08-04 02:16:25

+0

如果數據是表格性質,那麼獲取外部數據可能比您迄今嘗試的低級別方法更適合您 – Pynner 2012-08-04 19:12:34

+0

以下是網址:http://eoddata.com/stockquote/納斯達克/ AAPL.htm – user1575474 2012-08-08 02:32:05

回答

1

如果我試圖從08年10月12日開始關閉該頁面,這與我假設您正在做的類似,我會這樣做:

Set ie = New InternetExplorer 
    With ie 
     .navigate "http://eoddata.com/stockquote/NASDAQ/AAPL.htm" 
     .Visible = False 
     While .Busy Or .readyState <> READYSTATE_COMPLETE 
      DoEvents 
     Wend 
     Set objHTML = .document 
     DoEvents 
    End With 
    Set elementONE = objHTML.getElementsByTagName("TD") 
    For i = 1 To elementONE.Length 
     elementTWO = elementONE.Item(i).innerText   
     If elementTWO = "08/10/12" Then 
      MsgBox (elementONE.Item(i + 1).innerText) 
      Exit For 
     End If 
    Next i 
    DoEvents 
    ie.Quit 
    DoEvents 
    Set ie = Nothing 

您可以修改此選項以運行HTML並提取所需的任何數據。迭代+2將返回高價格等。

由於該頁面上有很多日期,因此您可能還想檢查它是否在最近的收盤價格和公司資料之間。