使用excel vba从img中刮除“ alt”

问题描述 投票:0回答:1

我正在尝试从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

谢谢!

excel vba image web-scraping alt
1个回答
0
投票

[您可以利用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.soinside.com 2019 - 2024. All rights reserved.