用网络抓取提取链接的问题

时间:2019-06-17 19:56:22

标签: excel vba web-scraping

我想提取此网页中列出的玩具的链接: https://cebra.com.ar/category/73/Juego-de-Construccion.html

我有一个完整的过程(这里不做复制,因为它很长很复杂),在某些情况下,我有以下无效的代码:

BitBlt

有什么办法解决这个问题吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

对象getElementsByTagName()的函数HTMLDocument返回一个列表,但是您试图访问一个对象的属性.href,就好像它是单个对象一样。

您应该替换为:

Cells(erow, 1) = html.getElementsByTagName("a").href

与此

Cells(erow, 1) = html.getElementsByTagName("a")[yourIndex].href

...,其中yourIndex是代表列表索引的数字(01,... n)。

当然,您必须找到正确的规则以将正确的a元素放置在正确的位置,因为仅获取带有标签a的文档的所有元素就会在您的容器中检索到278个元素页面(包括所有页面页眉,页脚和其他我实际上认为不需要的东西):

enter image description here

答案 1 :(得分:1)

getElementsByTagName返回一个集合,实际上您需要对其进行索引以获取特定元素。

但是,您不想要所有a标签。这样效率低下,您将需要进行额外的测试以限制感兴趣的对象。您需要专门用于产品的链接,因此请使用attribute = value css selector来获取这些链接:

Dim links As Object, i As Long
Set links = html.querySelectorAll("[href^=product]")

For i = 0 to links.Length - 1
    ActiveSheet.Cells(erow + i, 1) = links.item(i).href
Next

此:

[href^=product]

查找其值以^,href开头的product个属性。

如果您查看html页面,则可以看到每个目标链接都以该子字符串开头

enter image description here