使用的getElementById VBA网页抓取

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

在使用getElementsByClassName方法的范围从网页中提取数据的精细下面的宏的作品,但我需要它改成getElementsById因为类名称不是唯一的。任何帮助这里可以理解

Dim oHtml As HTMLDocument
Dim oElement As Object
Dim url As String
Set oHtml = New HTMLDocument

Application.ScreenUpdating = False

Sheets("ASIN").Range("A1:A100").ClearContents

url = Sheets("ASIN").Range("L2").Value


With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.send
oHtml.body.innerHTML = .responseText
End With


Set oElement = oHtml.getElementsByClassName("a-color-price")
For i = 0 To oElement.Length - 1
 Sheets("ASIN").Range("A" & (i + 1)) = oElement(i).innerText
Next i
Application.ScreenUpdating = True

任何帮助使用的getElementById将不胜感激。

页面截图检查连接

enter image description here

excel vba
1个回答
0
投票

我不知道你是什么样的URL指向,但我看到在屏幕的投篮TR元素,以及一些TD元素。请参阅下面的示例代码,并试图将其转换到您的具体使用情况。

Sub Dow_HistoricalData()

    Dim xmlHttp As Object
    Dim TR_col As Object, Tr As Object
    Dim TD_col As Object, Td As Object
    Dim row As Long, col As Long

    ThisSheet = ActiveSheet.Name
    Range("A2").Select
    Do Until ActiveCell.Value = ""
    Symbol = ActiveCell.Value
    Sheets(ThisSheet).Select
    Sheets.Add

    Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
    myURL = "https://www.fxstreet.com/economic-calendar"
    xmlHttp.Open "GET", myURL, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.send

    Dim html As Object
    Set html = CreateObject("htmlfile")
    html.body.innerHTML = xmlHttp.responseText

    Dim tbl As Object
    Set tbl = html.getElementById("fxst-calendartable")


    row = 1
    col = 1

    Set TR_col = html.getElementsByTagName("TR")
    For Each Tr In TR_col
        Set TD_col = Tr.getElementsByTagName("TD")
        For Each Td In TD_col
            Cells(row, col) = Td.innerText
            col = col + 1
        Next
        col = 1
        row = row + 1
    Next

Sheets(ActiveSheet.Name).Name = Symbol
Sheets(ThisSheet).Select
ActiveCell.Offset(1, 0).Select

Loop

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.