【问题标题】:Getting data from HTML source in VBA (excel)从 VBA 中的 HTML 源获取数据(excel)
【发布时间】:2012-08-02 01:44:52
【问题描述】:

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

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

以下是我遇到的问题:

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

1 的代码:

子 getData() Dim url As String, 即 As Object, state 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

【问题讨论】:

  • html 文本有多大?您能否向我们展示您正在使用的代码以及网址?我指的是第 1 点。
  • 如果数据是表格性质,获取外部数据可能比您迄今为止尝试的低级方法更适合您

标签: html string vba excel


【解决方案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 将返回高价等。

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

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2023-03-13
    • 2020-12-12
    • 2021-10-08
    • 1970-01-01
    • 2021-07-17
    相关资源
    最近更新 更多