使用 excel vba 从 img 中抓取 "alt"
Scrape "alt" from img with excel vba
我正在尝试从 www.walkscore.com 中获取步行分数,因为他们 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
我正在尝试从 www.walkscore.com 中获取步行分数,因为他们 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