求助:如何用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
关键说明
- 批量处理改造:如果需要批量抓取同类页面,可将
url变量改为读取Excel中的URL列表(比如A列),通过循环遍历每个URL执行抓取逻辑。 - Excel 2013兼容性:代码采用后期绑定IE对象,无需手动添加
Microsoft Internet Controls引用,直接运行即可。 - 等待时间调整:
Application.Wait的等待时间可根据你的网速修改,避免因页面加载慢导致抓取失败。 - 元素定位容错:如果页面元素的class名称更新,需打开目标页面的开发者工具(F12),重新获取对应元素的class或ID。
使用注意事项
- 打开Excel 2013后,按
Alt+F11打开VBA编辑器,插入模块后粘贴上述代码。 - 确保Excel信任中心已启用宏(文件→选项→信任中心→信任中心设置→宏设置→启用所有宏)。
- 首次运行时IE会弹出安全提示,需允许访问目标网站。
内容的提问来源于stack exchange,提问作者Karesz
相关产品推荐
相关产品推荐

