我正在尝试从www.walkscore.com抓取一个walkscore,因为他们的API不支持我的国家。我面临的问题;他们呈现的walkscore存储在img中,其值是我要在“ alt”部分中抓取的值。作为通过Excel VBA抓取的即时消息,我感到很陌生。
仅需一个分数(在“ alt”中)即可进行一次搜索并将其存储在特定的单元格中。目前,我仅以A10为例,但稍后我会修复。
查看我现在拥有的代码:
Dim ws As Worksheet: Set ws = Blad1
Dim IE As New InternetExplorer
IE.Visible = True
IE.navigate "https://www.walkscore.com/score/18-lindegracht-alkmaar-nh-netherlands"
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE
Dim Doc As HTMLDocument
Set Doc = IE.document
Set ClassCol = Doc.getElementsByClassName("blok-header-badge.score-info-link")
Set ElementCol = ClassCol.getElementsByTagName("img")
For Each Link In ElementCol
ws.Range("A10").Value = Link.getAttritube("alt")
Next
谢谢!
[您可以利用XMLHttpRequest
请求来获取所需的内容,而不是尝试麻烦的IE。这是你可以去的方式:
使用XMLHttpRequest:
Sub FetchAlt()
Const Url$ = "https://www.walkscore.com/score/18-lindegracht-alkmaar-nh-netherlands"
Dim HTML As New HTMLDocument, sAlt$
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", Url, False
.setRequestHeader "User-Agent", "Mozilla/5.0"
.send
HTML.body.innerHTML = .responseText
sAlt = HTML.querySelector(".score-info-link > img").getAttribute("alt")
MsgBox sAlt
End With
End Sub
使用IE:
Sub FetchAlt()
Dim oWalk As Object
With CreateObject("InternetExplorer.Application")
.Visible = False
.navigate "https://www.walkscore.com/score/18-lindegracht-alkmaar-nh-netherlands"
While .Busy Or .readyState < 4: DoEvents: Wend
Set oWalk = .document.querySelector(".score-info-link > img")
Debug.Print oWalk.getAttribute("alt")
End With
End Sub
它们都产生以下输出:
97 Walk Score of 18 Lindegracht Alkmaar NH Netherlands