使用 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