You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用Excel 2013宏下载网页完整表格数据

Excel 2013宏批量抓取BetExplorer完整赛事数据(积分榜+全部赛果)

实现思路

  • 用VBA调用IE浏览器模拟人工操作,解决PowerQuery无法触发"show all results"的问题
  • 等待页面完全加载后,自动点击展开全部赛果按钮
  • 定位页面中的积分榜和完整赛果表格,提取数据写入Excel指定位置

完整VBA代码

Sub BetExplorer_FullData_Scraper()
    Dim ie As Object
    Dim ws As Worksheet
    Dim tblStandings As Object, tblResults As Object
    Dim rowNum As Integer, colNum As Integer
    Dim btnShowAll As Object
    Dim url As String
    
    ' 设置目标URL,批量处理时可改为读取单元格列表
    url = "https://www.betexplorer.com/football/algeria/ligue-2/"
    
    ' 初始化IE
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True ' 调试时设为True,批量运行可改为False
    ie.navigate url
    
    ' 等待页面加载完成
    Do While ie.Busy Or ie.readyState <> 4
        DoEvents
    Loop
    
    ' 等待"show all results"按钮加载并点击
    On Error Resume Next
    Set btnShowAll = ie.Document.getElementsByClassName("table-show-more js-table-show-more")(0)
    On Error GoTo 0
    If Not btnShowAll Is Nothing Then
        btnShowAll.Click
        ' 点击后等待赛果加载
        Application.Wait Now + TimeValue("00:00:03") ' 可根据网速调整等待时间
        Do While ie.Busy Or ie.readyState <> 4
            DoEvents
        Loop
    End If
    
    ' 初始化工作表,可改为指定工作表名称
    Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    ws.Name = "Algeria_Ligue2_Data"
    
    ' 提取积分榜数据
    rowNum = 1
    ws.Cells(rowNum, 1).Value = "积分榜"
    rowNum = rowNum + 1
    Set tblStandings = ie.Document.getElementsByClassName("table-main leaguetable")(0)
    For Each r In tblStandings.Rows
        colNum = 1
        For Each c In r.Cells
            ws.Cells(rowNum, colNum).Value = c.innerText
            colNum = colNum + 1
        Next c
        rowNum = rowNum + 1
    Next r
    
    ' 提取完整赛果数据
    rowNum = rowNum + 2
    ws.Cells(rowNum, 1).Value = "全部赛果"
    rowNum = rowNum + 1
    Set tblResults = ie.Document.getElementsByClassName("table-main results")(0)
    For Each r In tblResults.Rows
        colNum = 1
        For Each c In r.Cells
            ws.Cells(rowNum, colNum).Value = c.innerText
            colNum = colNum + 1
        Next c
        rowNum = rowNum + 1
    Next r
    
    ' 清理资源
    ie.Quit
    Set ie = Nothing
    Set ws = Nothing
    Set tblStandings = Nothing
    Set tblResults = Nothing
    
    MsgBox "数据抓取完成!", vbInformation
End Sub

关键说明

  1. 批量处理改造:如果需要批量抓取同类页面,可将url变量改为读取Excel中的URL列表(比如A列),通过循环遍历每个URL执行抓取逻辑。
  2. Excel 2013兼容性:代码采用后期绑定IE对象,无需手动添加Microsoft Internet Controls引用,直接运行即可。
  3. 等待时间调整:Application.Wait的等待时间可根据你的网速修改,避免因页面加载慢导致抓取失败。
  4. 元素定位容错:如果页面元素的class名称更新,需打开目标页面的开发者工具(F12),重新获取对应元素的class或ID。

使用注意事项

  • 打开Excel 2013后,按Alt+F11打开VBA编辑器,插入模块后粘贴上述代码。
  • 确保Excel信任中心已启用宏(文件→选项→信任中心→信任中心设置→宏设置→启用所有宏)。
  • 首次运行时IE会弹出安全提示,需允许访问目标网站。

内容的提问来源于stack exchange,提问作者Karesz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:59:55