繁体   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