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

Python使用requests无法获取atacadao站点滚动加载的商品API数据

可行的requests抓取方案

第一步:定位动态加载API

你可以直接通过浏览器抓包拿到官方商品数据接口,无需使用selenium:

  • 打开目标页面后按下F12调出开发者工具,切换到「网络」面板,筛选「XHR/提取」请求
  • 向下滚动页面触发商品加载,在请求列表中找到路径包含/api/catalog_system/pub/products/search的GET请求,该接口就是返回商品全量数据的官方接口

第二步:构造请求参数与头信息

该接口支持分页查询,核心配置如下:

  • 必带请求头:User-Agent、Referer、Accept,缺少会触发站点反爬规则返回空数据或403错误
  • 核心查询参数:
    • ft: 商品分类标识,当前酒类分类值为bebidas
    • _from: 分页起始索引,从0开始计数
    • _to: 分页结束索引,单页最多可返回50条商品数据
    • O: 排序规则,默认值OrderByScoreDESC即可

第三步:代码示例

import requests
import time

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Referer": "https://www.atacadao.com.br/bebidas/",
    "Accept": "application/json"
}

base_url = "https://www.atacadao.com.br/api/catalog_system/pub/products/search"
page_size = 30
max_page = 10  # 按实际需要调整总页数

for page in range(max_page):
    params = {
        "ft": "bebidas",
        "_from": page * page_size,
        "_to": (page + 1) * page_size - 1,
        "O": "OrderByScoreDESC"
    }
    response = requests.get(base_url, headers=headers, params=params)
    if response.status_code == 200:
        product_list = response.json()
        for product in product_list:
            # 提取需要的字段
            product_name = product.get("productName")
            price = product.get("items")[0].get("sellers")[0].get("commertialOffer").get("Price")
            print(f"商品名:{product_name},价格:{price}")
    # 加延迟避免触发反爬
    time.sleep(2)

注意事项

  • 站点有请求频率限制,单次请求间隔建议控制在1-2秒以上,频繁请求会触发IP封禁
  • 若返回403错误,可以尝试更新User-Agent、添加Cookie参数解决
  • 接口返回的JSON结构中包含商品全量字段,可按需提取对应值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:24:04