VBA网络抓取

时间:2015-10-21 13:32:36

标签: excel-vba web-scraping html-tableextract vba excel

我正在尝试从此网站上的此表中获取一行数据: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源代码并突出显示我要抓取的内容。

screenshot of HTML code

问题是查找表行数据的方法。有人可以向我解释如何获取其他数据行吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

我能够做一些试验和错误并以这种方式得到正确的参考:

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):普通股......(一堆空间)......   $五千九百四十一$ 5877 $五千七百七十三$ 3779

然后我测试了这个陈述:

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

得到了相同的结果。