我正试图通过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.
答案 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
的元素
有问题的元素
欠佳的方式:
一种不太理想的方法是使用“拆分”来剪裁您的身材,例如
FIFTY_TWO_WK_RANGE-value
一个可能更适合您的代码的版本如下(通常,我会将范围放入数组并以更快的速度循环,但这更接近您):
Debug.Print Split(Split(Split(Http2.ResponseText, "data-test=""FIFTY_TWO_WK_RANGE-value""")(1), "<")(0), ">")(1)