【问题标题】:VBA web scrapingVBA网页抓取
【发布时间】:2015-10-21 22:05:43
【问题描述】:

我正在尝试从这个网站上的这个表中获取一行数据:http://www.nasdaq.com/symbol/neog/financials?query=balance-sheet

现在我可以设法使用

获得“总负债”行
doc.getelementsbyclassname("net")(3).innertext 

但我不知道如何获取任何其他数据行,例如普通股。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = Range("bscode").Row And _
Target.Column = Range("bscode").Column Then
Dim IE As New InternetExplorer
IE.Visible = True
IE.navigate "http://www.nasdaq.com/symbol/" & Range("bscode").Value & "/financials?query=balance-sheet&data=quarterly"

Do
 DoEvents

Loop Until IE.readyState = READYSTATE_COMPLETE

Dim Doc As HTMLDocument
Set Doc = IE.document
Dim sD As String
sD = Doc.getElementsByTagName("tr")(8).innerText

MsgBox sD

Dim aD As Variant
aD = Split(sD, "$")
Range("bs").Value = aD(1)
Range("ba").Value = aD(2)
Range("bb").Value = aD(3)
Range("bc").Value = aD(4)

End If
End Sub

如果有帮助,我有要抓取的 HTML 源代码和突出显示的 tr。

screenshot of HTML code

问题是查找表格行数据的方法。有人可以向我解释如何获取其他数据行吗?将不胜感激!

【问题讨论】:

  • JPs IE Automation Tips 极大地帮助了探索如何在 VBA 中从网页中抓取数据。里面有循环遍历元素的代码,然后你可以使用debug.print 来确定你需要哪一个。
  • @ScottHoltzman 您提供的链接不再有效。还有其他来源吗?
  • @RickHenderson - 是的,该网站已被删除。如果你搜索一下,网上有很多资源。

标签: excel web-scraping html-tableextract vba


【解决方案1】:

我能够进行一些试验和错误,并通过这种方式获得正确的参考:

Dim eTR As Object, cTR As Object, I as Integer 'I used object, because I did late binding
Set cTR = Doc.getElementsByTagName("tr")

i = 0

For Each eTR In cTR

    If Left(eTR.innerText, 3) = "Com" Then

        Debug.Print "(" & i; "): " & eTR.innerText

    End If

    i = i + 1

Next

随即显示的窗口

(308): 普通股...(一堆空格)... $5,941$5,877$5,773$3,779

然后我测试了这个语句:

sd = Doc.getElementsByTagName("tr")(308).innerText
Debug.Print sd

得到了同样的结果。

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 2015-09-17
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2017-02-25
    • 2020-03-19
    • 2018-05-31
    相关资源
    最近更新 更多