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

VBA网页爬取问题:无法获取Crate&Barrel沙发页面产品信息

问题原因

你遇到的问题是因为目标网站属于动态渲染的单页应用:直接用MSXML2.XMLHTTP请求获取的是页面的初始静态HTML,产品数据并没有包含在其中,而是页面加载完成后通过JavaScript调用后端API动态加载的。所以你解析初始HTML自然找不到任何产品相关的元素。

解决方案

要正确获取数据,需要:

  • 找到网站加载产品数据的真实API接口;
  • 直接请求该API获取JSON格式的原始数据;
  • 解析JSON数据提取所需字段。

步骤1:定位API接口

用浏览器打开目标页面,按F12打开开发者工具,切换到Network标签页,刷新页面后,在XHR/Fetch请求中查找包含产品数据的请求。你会发现类似这样的API接口(实际以抓包结果为准):
https://www.crateandbarrel.me/en-ae/api/search/products?query=sofas&page=1&pageSize=48&sort=featured

这个接口返回的是JSON格式的产品列表,包含你需要的名称、SKU、价格等所有字段。

步骤2:使用VBA请求API并解析JSON

首先需要导入VBA-JSON库(下载后导入到VBA项目即可),然后编写以下代码:

Sub ScrapeSofaData()
    Dim http As New MSXML2.XMLHTTP60
    Dim jsonObject As Object
    Dim products As Variant
    Dim product As Variant
    Dim r As Integer
    
    ' API接口(以实际抓包结果为准,可调整分页、排序参数)
    Dim apiUrl As String
    apiUrl = "https://www.crateandbarrel.me/en-ae/api/search/products?query=sofas&page=1&pageSize=48&sort=featured"
    
    ' 发送请求,模拟浏览器请求头
    With http
        .Open "GET", apiUrl, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
        .send
    End With
    
    ' 解析JSON
    Set jsonObject = JsonConverter.ParseJson(http.responseText)
    Set products = jsonObject("products")
    
    ' 写入Excel
    r = 2
    ' 表头
    Range("A1").Value = "产品名称"
    Range("B1").Value = "SKU编号"
    Range("C1").Value = "新价格"
    Range("D1").Value = "旧价格"
    
    For Each product In products
        ' 提取产品名称
        Range("A" & r).Value = product("name")
        ' 提取SKU
        Range("B" & r).Value = product("sku")
        ' 提取新价格(当前售价)
        Range("C" & r).Value = product("price")("current")
        ' 提取旧价格(原价,仅促销产品存在)
        If product("price").Exists("original") Then
            Range("D" & r).Value = product("price")("original")
        Else
            Range("D" & r).Value = ""
        End If
        r = r + 1
    Next product
    
    MsgBox "数据抓取完成!"
End Sub

注意事项

  • 不同页面的API参数(如分页page、每页数量pageSize)可能不同,需根据需求调整;
  • 部分网站会限制请求频率,避免短时间内发送大量请求;
  • 如果API需要验证信息(如Token),需在请求头中添加对应字段(可通过抓包获取)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:20:19