第3次迭代后,VBA Web爬网代码循环失败

时间:2019-05-12 22:37:12

标签: excel vba loops web-scraping do-loops

我正在尝试从多个网页(同一站点的不同股票页面)中提取数据。我可以在执行循环的前3次获取数据,但是在第4次迭代中,它会引发错误91:未设置对象变量或With块变量。

我尝试遍历Internet Explorer的打开命令,以便在每次迭代的开始时打开一个新的浏览器,并在循环结束时关闭它,以确保IE对象不会以某种方式失败。那没用,同样的问题。

=ArrayFormula($V$1)

到网页的链接保存在单元格中,因此包含单元格代码。找到正确的单元格,检索其中的网页,然后移至其下方的单元格。该代码在前3次迭代中运行良好,但由于某种原因在第4次失败。错误代码将“ text = .document.getElementsByClassName ...”行标识为错误。

2 个答案:

答案 0 :(得分:1)

我认为您的问题可能是由于网页上不存在的元素所致。如果确实存在,您确定要从集合中提取正确的元素吗?

尝试用

运行
.document.getElementsByClassName("classname")(0).outerText.

如果这行得通,那么我建议您查看网页上有多少个具有“ classname”类的元素。虽然在其他页面上您可能具有2个或多个元素,但在第三页上可能只有一个。

您可以发布要抓取的网页吗?

答案 1 :(得分:1)

找到了解决方案!在所有情况下,Sleep.1000命令都没有提供足够的时间,我想代码正在尝试在页面可用之前提取数据。我认为其中的循环会解决该问题,但我猜不是(这是新事物)。无论如何,我将其更改为Sleep.3000,以使慢速的互联网有足够的时间赶上它,并且像梦一样工作。

感谢大家的帮助。