如何在Web源代码中选择第n个事件

时间:2018-08-31 12:34:18

标签: excel excel-vba web-scraping

我正试图通过Yahoo Finance找到52个星期的价格范围,以获得报价清单。

URL:https://finance.yahoo.com/quote/AAPL?p=AAPL

我在网上和YouTube上看过,并从那里使用了很多指导。但是,当我运行代码时,它将选择数组的第一个实例,而实际上我需要第6个。因为该页面似乎也由许多其他代码组成,所以根据我要搜索的字符串“ fiftyTwoWeekRange”,我需要的不是第一个。

有没有一种方法可以指定搜索以选择不是第一个事件而是第n个事件?谢谢你的帮助。我在YouTube上找到的正在使用的代码非常有帮助,但我希望你们能为您提供帮助。

Basic jersey
Does what it says on the tin
Main: 100% Cotton.

1 个答案:

答案 0 :(得分:1)

在我看来,这是一种奇怪的HTML解析方法,效率很低。

好方法:

如果您超出范围,并且可以将响应存储在querySelector变量中,则可以使用HTMLDocument的{​​{1}}方法。例如,我将研究CSS选择器,作为获取感兴趣数据的更好方法。

HTMLDocument

这使用CSS选择器通过元素的属性来定位元素。 Option Explicit Public Sub test() Dim html As HTMLDocument Set html = New HTMLDocument With CreateObject("WINHTTP.WinHTTPRequest.5.1") .Open "GET", "https://finance.yahoo.com/quote/AAPL?p=AAPL", False .send html.body.innerHTML = .responseText End With Debug.Print html.querySelector("[data-test=FIFTY_TWO_WK_RANGE-value]").innertext End Sub 表示属性选择器。它匹配属性为[]且值为data-test的元素


有问题的元素

test


欠佳的方式:

一种不太理想的方法是使用“拆分”来剪裁您的身材,例如

FIFTY_TWO_WK_RANGE-value

一个可能更适合您的代码的版本如下(通常,我会将范围放入数组并以更快的速度循环,但这更接近您):

Debug.Print Split(Split(Split(Http2.ResponseText, "data-test=""FIFTY_TWO_WK_RANGE-value""")(1), "<")(0), ">")(1)