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

VBA网页抓取压缩弹簧表格仅读取首行(表头)问题求助

解决VBA抓取Lee Spring压缩弹簧表格仅获取表头的问题

你当前代码用MSXML2.XMLHTTP获取的是页面静态HTML,但该网站的表格数据是动态加载的——静态源码里只有表头,数据行是页面加载后通过JavaScript异步拉取并渲染的,所以只能读到首行表头。以下是两种可行的解决方案:

方案1:模拟浏览器加载页面(适合新手)

使用InternetExplorer.Application对象模拟浏览器完整加载页面,等待数据渲染完成后再抓取表格内容,代码如下:

Sub GetLeeSpringData()
    Const URL = "https://www.leespring.com/compression-springs"
    Dim IE As Object
    Dim HTMLDoc As Object
    Dim tbl As Object
    Dim tr As Object, td As Object
    Dim r As Long, c As Long
    
    ' 创建IE对象
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True ' 调试时可设为True显示浏览器,完成后改为False隐藏
    IE.Navigate URL
    
    ' 等待页面加载完成(包括动态数据)
    Do While IE.Busy Or IE.ReadyState <> 4
        DoEvents
    Loop
    ' 额外等待3秒确保数据完全渲染(可根据网速调整时长)
    Application.Wait Now + TimeValue("00:00:03")
    
    Set HTMLDoc = IE.Document
    ' 定位目标表格
    Set tbl = HTMLDoc.getElementsByClassName("cols-27")
    
    If tbl.Length = 0 Then
        MsgBox "未找到目标表格", vbExclamation
        IE.Quit
        Set IE = Nothing
        Exit Sub
    End If
    
    ' 写入Excel工作表
    r = 1
    For Each tr In tbl(0).Rows
        c = 1
        For Each td In tr.Cells
            ThisWorkbook.ActiveSheet.Cells(r, c).Value = td.innerText
            c = c + 1
        Next td
        r = r + 1
    Next tr
    
    ' 清理资源
    IE.Quit
    Set IE = Nothing
    Set HTMLDoc = Nothing
    Set tbl = Nothing
    
    MsgBox "数据抓取完成", vbInformation
End Sub

代码说明:

  • IE.Visible:控制浏览器是否显示,调试时开启方便观察加载状态
  • Application.Wait:额外等待确保动态数据渲染完毕,可根据实际网速调整时长
  • 明确指定ThisWorkbook.ActiveSheet写入数据,避免默认引用错误

方案2:直接调用数据API(高效推荐)

通过浏览器开发者工具找到网站加载表格数据的API接口,直接请求JSON格式数据并解析,无需模拟浏览器,速度更快。

操作步骤:

  1. 打开目标页面,按F12打开开发者工具
  2. 切换到「网络」标签,刷新页面,筛选「XHR」类型请求
  3. 找到返回表格数据的API请求(URL通常包含api、data等关键词)
  4. 复制该API的请求URL,替换到下面的示例代码中

示例代码(需替换为实际API地址):

Sub GetLeeSpringDataViaAPI()
    Const API_URL = "替换为实际找到的API接口地址"
    Dim http As Object
    Dim jsonObj As Object
    Dim dataArr As Variant
    Dim i As Long, j As Long
    Dim headers As Variant
    
    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", API_URL, False
    http.send
    
    ' 解析JSON(需先导入VBA-JSON库,可在GitHub下载)
    Set jsonObj = JsonConverter.ParseJson(http.responseText)
    
    ' 以下需根据API返回的JSON结构调整,示例为通用结构
    headers = jsonObj("headers")
    dataArr = jsonObj("data")
    
    ' 写入表头
    For j = LBound(headers) To UBound(headers)
        ThisWorkbook.ActiveSheet.Cells(1, j + 1).Value = headers(j)
    Next j
    
    ' 写入数据行
    For i = LBound(dataArr) To UBound(dataArr)
        For j = LBound(dataArr(i)) To UBound(dataArr(i))
            ThisWorkbook.ActiveSheet.Cells(i + 2, j + 1).Value = dataArr(i)(j)
        Next j
    Next i
    
    ' 清理资源
    Set http = Nothing
    Set jsonObj = Nothing
    MsgBox "API数据抓取完成", vbInformation
End Sub

注意:

  • 解析JSON需要安装VBA-JSON库,或手动编写JSON解析逻辑
  • API接口可能存在请求头、参数或分页限制,需根据实际请求情况调整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:02:56