You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何通过Excel的Data From Web导入完整滚动加载网页?含宏录制方法

解决Excel导入滚动加载网页完整数据的方案

这个问题问得好!Excel自带的「From Web」工具对付静态网页很顺手,但碰到需要滚动加载的动态页面就拉胯了——它只能抓取页面初始渲染的内容,没法触发滚动加载更多数据。下面给你两种靠谱的解决方案,还有怎么做一个能适配大多数滚动页面的通用宏:

方案一:Power Query + VBA模拟滚动(推荐,可控性强)

这种方法结合VBA模拟浏览器滚动触发加载,再把完整HTML交给Power Query解析,兼顾灵活性和易用性:

步骤1:编写滚动加载的VBA代码

打开Excel按Alt+F11进入VBA编辑器,插入新模块,粘贴以下代码:

Sub ScrapeFullScrollablePage()
    Dim IE As Object
    Dim htmlDoc As Object
    Dim scrollHeight As Long, lastScrollHeight As Long
    Dim targetURL As String
    Dim waitSeconds As Integer
    
    ' 让用户输入目标网页和等待时长
    targetURL = InputBox("请输入要抓取的网页URL:")
    If targetURL = "" Then Exit Sub
    waitSeconds = InputBox("请输入每次滚动后的等待秒数(建议2-5秒,根据网页速度调整):", , 3)
    
    ' 初始化IE浏览器
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True ' 调试时设为True,正式运行可改False后台执行
    IE.Navigate targetURL
    
    ' 等待页面初始加载完成
    Do While IE.Busy Or IE.ReadyState <> 4
        DoEvents
    Loop
    
    ' 循环滚动到底部,直到没有新内容加载
    lastScrollHeight = 0
    Do
        scrollHeight = IE.Document.body.scrollHeight
        If scrollHeight = lastScrollHeight Then Exit Do ' 高度不变说明加载完毕
        
        ' 滚动到当前页面底部
        IE.Document.parentWindow.scrollTo 0, scrollHeight
        ' 等待内容加载
        Application.Wait Now + TimeValue("00:00:" & waitSeconds)
        
        lastScrollHeight = scrollHeight
    Loop
    
    ' 将完整HTML内容写入工作表(这里写在Sheet1的A1单元格)
    Sheet1.Range("A1").Value = IE.Document.body.innerHTML
    
    ' 关闭浏览器
    IE.Quit
    Set IE = Nothing
    MsgBox "完整HTML已抓取完成,可导入Power Query解析!"
End Sub

步骤2:用Power Query解析完整HTML

  1. 回到Excel,选中刚才写入HTML的单元格(比如Sheet1!A1)
  2. 点击「数据」选项卡 →「从表格/区域」,确认创建表
  3. 在Power Query编辑器中,选中HTML列 → 点击「转换」选项卡 →「解析」→「HTML」
  4. 展开解析后的内容,找到你需要的表格,加载回Excel即可

方案二:Power Automate Desktop(无代码,新手友好)

如果你不想写代码,微软的Power Automate Desktop是个不错的选择,可视化操作就能完成滚动抓取:

  • 打开Power Automate Desktop,新建一个流
  • 添加「启动浏览器」动作,输入目标网页URL
  • 添加「循环」动作,设置循环条件为「页面滚动高度发生变化」
    • 循环内添加「滚动网页」动作,选择「滚动到页面底部」
    • 再添加「等待」动作,设置等待时长(比如3秒)
  • 循环结束后,添加「提取网页数据」动作,选择要抓取的表格
  • 最后添加「写入Excel工作表」动作,把数据导出到你的目标Excel文件
  • 保存流后,直接运行就能得到完整数据,还能把流导出为VBA宏导入Excel复用

录制通用宏的适配技巧

要让宏能适配任意滚动网页,注意这几个关键点:

  • 动态参数化:像上面的代码一样,让用户输入URL和等待时长,不要把这些值写死
  • 智能加载判断:不要固定滚动次数,而是通过判断页面滚动高度是否停止变化来确定加载完成,避免漏抓或多余等待
  • 通用表格解析:在VBA里可以直接遍历页面的所有表格,把数据写入Excel,比如用htmlDoc.getElementsByTagName("table")遍历,不需要依赖Power Query(适合纯VBA场景)
  • 错误处理:添加简单的错误捕获,比如网页加载失败时弹出提示,避免宏崩溃

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

火山引擎 最新活动