首页 > 解决方案 > 使用 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: Object variable or With block variable not set

下面是我正在尝试实现的一段代码。

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

标签: excelvbaweb-scraping

解决方案


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

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

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

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

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

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


推荐阅读