使用Excel VBA和XML抓取网站



我正在尝试抓取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

您正在尝试获取通过以下代码获得的集合元素的第二个ChildinnerText属性:

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

发生此错误,因为此页面上不存在HTMLDoc.getElementsByClassName("price-current")(0)错误提示中的"对象"。

您可以通过以下方式进行检查:

Debug.Print HTMLDoc.getElementsByClassName("price-current").Length

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

这有帮助吗?

Dim XMLPage As Object
Dim HTMLDoc As Object

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

堆栈上有一些关于何时使用new等的文章,所以我不打算介绍它。

最新更新