如何用Power Query提取网站未完全加载的完整表格?
解决Power Query提取需点击“Load More”的完整表格问题
这类网站的“Load More”按钮一般通过AJAX异步请求加载数据,URL不会变化,直接用Power Query的常规网页抓取只能拿到初始加载的内容,得通过以下方式获取全量数据:
方法1:抓取后台API接口(推荐)
这类网站的“Load More”本质是向后台接口发送分页请求,返回JSON格式的新增数据,直接抓这个接口就能拿到全量内容:
- 打开目标网站,按F12调出开发者工具,切换到「网络」标签页
- 清空现有请求记录,点击“Load More”按钮,观察新出现的XHR/Fetch类型请求
- 找到返回表格数据的请求,复制它的完整URL,同时留意请求参数里的分页标识(比如
page、offset、limit,代表页码、起始位置、每页条数) - 新建Power Query查询,选「从其他源」>「从Web」,粘贴复制的API URL
- 如果需要多页数据,用Power Query生成页码列表(比如
List.Numbers(1, 6)表示1到6页),再用List.Transform批量替换URL里的页码参数,生成所有请求URL,最后用Table.Combine合并所有返回的表格数据 - 将返回的JSON数据转成表格,展开嵌套字段,匹配原网页表格结构后加载到Excel
方法2:VBA模拟点击加载全量数据
如果API接口参数复杂难以抓取,可先用VBA模拟点击“Load More”,把所有数据加载到浏览器后再用Power Query抓取:
- 打开Excel,按Alt+F11打开VBA编辑器,插入模块,粘贴以下代码(替换目标URL和按钮的CSS选择器):
Sub LoadAllTableData() Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate "你的目标网页URL" ' 等待页面初始加载完成 Do While ie.Busy Or ie.ReadyState <> 4 DoEvents Loop ' 循环点击Load More按钮,直到按钮消失 Do On Error Resume Next ' 替换成页面上Load More按钮的CSS选择器,比如".load-more-btn" ie.Document.querySelector(".load-more-btn").Click On Error GoTo 0 ' 等待数据加载,根据网站速度调整等待时间 Application.Wait Now + TimeValue("00:00:02") Loop Until ie.Document.querySelector(".load-more-btn") Is Nothing ' 此时页面已加载全量数据,可关闭浏览器后用Power Query抓取 ie.Quit Set ie = Nothing End Sub
- 运行VBA代码,等待所有数据加载完成后,再用你原来的Power Query步骤抓取网页表格即可
内容的提问来源于stack exchange,提问作者Rennie C
相关产品推荐
相关产品推荐

