【问题标题】:VBA Scrape tableVBA 刮板
【发布时间】:2021-06-14 22:13:45
【问题描述】:

我想在https://data.goaloong.net/1x2/上刮桌子

目前我正在使用此代码

Set http = New MSXML2.XMLHTTP
Set html = New HTMLDocument

url = "https://data.goaloong.net/1x2/"

http.Open "GET", url, False
http.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
http.send
    While http.readyState <> 4
        DoEvents
    Wend
html.body.innerHTML = http.responseText

   
With Sheets("table")

    Set HTMLAtab = html.getElementsByTagName("table")(0)

    For Each HTMLArow In HTMLAtab.Rows
        iRow = iRow + 1
        iCol = 0
        For Each HTMLAcel In HTMLArow.Cells
            iCol = iCol + 1
            Cells(iRow, iCol) = HTMLAcel.innerText
        Next HTMLAcel
    Next HTMLArow
          
End With

它没有做我需要的,我的目标是抓取 5 列的内容。

我尝试修改代码:

    .Cells(i, 1) = html.getElementsByClassName("black-down f-white")(0).innerText
    .Cells(i, 2) = html.getElementsByClassName("en")(0).getAttribute("data-tf")
    .Cells(i, 3) = html.getElementsByClassName("team")(0).innerText
    .Cells(i, 4) = html.getElementsByClassName("td")(2).getElementsByTagName("a")(0).innerText

尝试了各种方法,但都失败了。

我可以得到善意的支持吗?

【问题讨论】:

  • 第二列Time在xhr解决方案中不存在。

标签: vba xmlhttprequest scrape


【解决方案1】:

这是你想要的吗?

Sub TryThis()
    Dim HTMLDoc As New HTMLDocument
    Dim objTable As Object
    Dim lRow As Long
    Dim lngTable As Long
    Dim lngRow As Long
    Dim lngCol As Long
    Dim ActRw As Long
    Dim objIE As InternetExplorer
    Set objIE = New InternetExplorer
    Dim sht As Worksheet
    Dim LastColumn As Long

    objIE.Navigate "https://data.goaloong.net/1x2/"

    Do Until objIE.ReadyState = 4 And Not objIE.Busy
        DoEvents
    Loop
    
    Set sht = ThisWorkbook.Worksheets("Sheet1")
    
    Application.Wait (Now + TimeValue("0:00:01"))
    HTMLDoc.body.innerHTML = objIE.Document.body.innerHTML
    With HTMLDoc.body
        Set objTable = .getElementsByTagName("table")
        For lngTable = 0 To objTable.Length - 1
            For lngRow = 0 To objTable(lngTable).Rows.Length - 1
                For lngCol = 0 To objTable(lngTable).Rows(lngRow).Cells.Length - 1
                If lngCol = 0 Or lngCol = 1 Or lngCol = 2 Or lngCol = 3 Or lngCol = 11 Or lngCol = 12 Then
                    ThisWorkbook.Sheets("Sheet1").Cells(ActRw + lngRow + 1, lngCol + 1) = objTable(lngTable).Rows(lngRow).Cells(lngCol).innerText
                End If
                Next lngCol
            Next lngRow
            ActRw = ActRw + objTable(lngTable).Rows.Length + 1
        Next lngTable
    End With
    objIE.Quit
End Sub

【讨论】:

  • 我试过你的代码,我有这个结果:imgur.com/7L48LXN我的目标是i.stack.imgur.com/IOOV2.jpg,可能使用xmlhttp
  • 这是因为那些是合并的单元格,或者任何你想在网站上命名的单元格。我会不惜一切代价避免合并单元格。
  • 我注意到我需要的内容在 更改类
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 2011-07-22
  • 2023-04-02
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
相关资源
最近更新 更多