excel - 使用 Excel VBA 和 XML 抓取网站

标签 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:对象变量或未设置 block 变量

下面是我正在尝试实现的一段代码。
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

最佳答案

您正在尝试获取 innerText 2楼Child通过此代码获得的集合元素:

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

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

您可以通过以下方式进行检查:
Debug.Print HTMLDoc.getElementsByClassName("price-current").Length

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

关于excel - 使用 Excel VBA 和 XML 抓取网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50605825/

相关文章:

python - 使用 python 进行 Web 抓取 - 不断从 jquery 表中获取重复的第一行值

vba - 附加到分隔的文本文件

.net - 在没有安装office的情况下在.net中创建excel文件

sharepoint - 当 Word Doc 位于服务器上时,如何从 Excel VBA 更改 Word Doc 中的文本?

excel - VBA插入函数VLOOKUP到范围,在其他工作簿中查找范围

go - 如何使用 Golang 单击按钮进行 Web 抓取

sql-server - 加入列上的行(microsoff SSIS)

vba - 将两个数组或矩阵逐个元素相加

mysql - 使用 VBA 连接到在线 mySQL 数据库

web-services - 旅游比较网站