簡體   English   中英

在VBA中從HTML源獲取數據(Excel)

[英]Getting data from HTML source in VBA (excel)

我正在嘗試從一個網站收集數據,一旦源為字符串形式,該數據應該是可管理的。 環顧四周,我已經整理了一些可能的解決方案,但是所有這些解決方案都遇到了問題:

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

這是我遇到的問題:

  1. 當我將innerHTML存儲到字符串中時,它不是全部來源,只是一部分
  2. ActiveX不允許創建Inet對象(錯誤429)
  3. 我已將htm放入計算機上的文件夾中,如何將其放入VBA中的字符串中?

代碼1:

Sub getData()Dim url作為字符串,即作為對象,狀態作為Integer Dim文本作為Variant,startS作為Integer,endS作為Integer

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

如果我試圖從該頁面的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將返回高價,依此類推。

由於該頁面上的日期很多,因此您可能還需要檢查一下該日期是否在“近期收盤價”和“公司資料”之間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM