0

我正在尝试从网站收集数据,一旦源为字符串形式,这些数据应该是可管理的。环顾四周,我收集了一些可能的解决方案,但都遇到了问题:

  1. 使用 InternetExplorer.Application 打开 url 然后访问内部 HTML
  2. 网内
  3. 使用 Shell 命令运行 wget

以下是我遇到的问题:

  1. 当我将 innerHTML 存储到一个字符串中时,它不是整个源,只是一小部分
  2. ActiveX 不允许创建 Inet 对象(错误 429)
  3. 我已将 htm 放入计算机上的文件夹中,如何将其放入 VBA 中的字符串中?

代码 1:

Sub getData() Dim url As String, ie As Object, state As Integer Dim text As Variant, startS As Integer, endS As 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
4

1 回答 1

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 将返回高价等。

由于该页面上有很多日期,您可能还希望检查它是否在最近的日终价格和公司简介之间。

于 2012-08-10T16:34:30.830 回答