使用Excel VBA和XML刮取网站

时间:2018-05-30 13:21:13

标签: excel vba web-scraping

我正在努力刮取Newegg网站以获得产品价格。当我运行这段代码时,它就完成了工作。

Sub test()

Dim objIE As InternetExplorer
Set objIE = New InternetExplorer

objIE.Visible = True
objIE.Navigate "https://www.newegg.com/Product/Product.aspx?item=1TS-000E-083F2"

Do While objIE.ReadyState <> READYSTATE_COMPLETE
Loop

    Debug.Print objIE.Document.getElementsByClassName("price-current")(0).Children(1).innerText

End Sub

但是,当我尝试使用XML来更快地执行时,我遇到运行时错误91:对象变量或未设置块变量

以下是我要尝试实施的一段代码。

Sub testxml()

Dim XMLPage As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument



XMLPage.Open "GET", "https://www.newegg.com/Product/Product.aspx?item=1TS-000E-083F2", False
XMLPage.send

HTMLDoc.body.innerHTML = XMLPage.responseText


Debug.Print HTMLDoc.getElementsByClassName("price-current")(0).Children(1).innerText
End Sub

2 个答案:

答案 0 :(得分:4)

您正尝试获取通过此代码获取的第二个innerText集合元素的Child属性:

HTMLDoc.getElementsByClassName("price-current")(0)

发生此错误,因为此页面上不存在错误提示“{1}”中的“对象”。

您可以查看:

HTMLDoc.getElementsByClassName("price-current")(0)

它将为0,表示不存在具有此类的元素。如果它存在于IE自动化中,则意味着该元素是通过JavaScript生成的HTML的一部分,XMLHTTP请求将不会在其响应中使用它。

答案 1 :(得分:0)

这有帮助吗?

Dim XMLPage As Object
Dim HTMLDoc As Object


Set XMLPage = New MSXML2.XMLHTTP60
Set HTMLDoc = New MSHTML.HTMLDocument

关于何时使用新的等等,有一些文章在堆栈上,所以我不打算覆盖它。