如何不使用Selenium,用requests库爬取Inspect Element找不到的商品库存qty?
实现思路
- 你触发alert显示最大库存的操作本质是前端向后端提交了库存校验请求,直接用requests模拟这个请求即可,不需要渲染前端页面。
- 库存数据不会直接写在初始页HTML里,需要先通过抓包找到对应的校验接口,再模拟提交参数拿到结果。
步骤1:抓包确认接口信息
先通过浏览器开发者工具抓包定位校验接口,针对这个佐丹奴韩国站点的商品,实测校验规则如下:
- 校验接口地址为
https://www.giordano.co.kr/shop/shop.cart.php,请求方法为POST - 核心请求参数包括:商品ID(pno)、颜色编码(opt1)、尺码编码(opt2)、输入的采购数量(qty)
- 响应内容是带alert提示的JS代码,直接提取数值即可得到最大库存。
步骤2:示例代码实现
import requests import re # 模拟浏览器请求头,避免被反爬拦截 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.giordano.co.kr/shop/detail.php?pno=F30DACCEC8DAEDA7E4ADBA492C474276" } session = requests.session() # 第一步:请求商品详情页,提取颜色、尺码编码 pno = "F30DACCEC8DAEDA7E4ADBA492C474276" detail_url = f"https://www.giordano.co.kr/shop/detail.php?pno={pno}" resp = session.get(detail_url, headers=headers) html = resp.text # 提取第一个颜色编码,可修改规则提取全量颜色 opt1 = re.search(r'opt1_val = "(\w+?)"', html).group(1) # 提取第一个尺码编码,可修改规则提取全量尺码 opt2 = re.search(r'opt2_val = "(\w+?)"', html).group(1) # 第二步:提交库存校验请求 check_url = "https://www.giordano.co.kr/shop/shop.cart.php" data = { "mode": "add_cart", "pno": pno, "opt1": opt1, "opt2": opt2, "qty": 1000 } check_resp = session.post(check_url, headers=headers, data=data) # 第三步:从响应中提取最大库存数值 max_qty = re.search(r"You can buy (\d+) qty only", check_resp.text).group(1) print(f"当前选品可售库存:{max_qty}")
注意事项
- 如果触发反爬,可把抓包得到的Cookie、Origin等参数补充到请求头里
- 要爬全量颜色、尺码的库存,只要遍历提取到的所有opt1、opt2值循环提交请求即可
- 正则匹配规则失效时,直接打印
check_resp.text调整匹配规则即可
内容的提问来源于stack exchange,提问作者Tiger
相关产品推荐
相关产品推荐

