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
相关产品推荐
相关产品推荐

