在电商竞品监控、价格预警、选品分析等场景中,快速获取淘宝商品SKU 实时价格、库存、规格组合是核心需求。官方 API 虽稳定但需权限、有调用限制,本文分享一套纯前端逆向方案,不依赖官方接口,直接从商品详情页提取完整 SKU 数据,兼顾实用性与可落地性。
一、核心思路:抓前端渲染数据源
淘宝 SKU 与库存不会写在静态 HTML 中,而是以JSON 对象嵌入页面,由 JS 渲染。核心就是定位并解析这个内置 JSON,跳过接口签名与权限校验。
关键数据位置
页面源码中搜索以下全局变量,即可找到完整 SKU 数据集:
window.__INITIAL_STATE__window._itemDatawindow.pageDatawindow.dataLayer
核心字段结构:
json
{
"skuInfo": {
"skus": [
{
"skuId": "123456789",
"prices": { "price": "299.00", "vipPrice": "289.00" },
"stock": { "stockQuantity": 120 },
"properties": "颜色:黑色;尺码:L",
"status": 1
}
]
}
}
二、两种实现方案对比
方案 1:轻量静态请求 + 正则提取(推荐)
适用场景 :小规模采集、快速验证、低资源消耗优点 :速度快、无需浏览器、不易触发风控缺点:部分加密商品需登录态
实现步骤
- 请求商品详情页 HTML,携带正常 UA 与 Cookie
- 用正则匹配
__INITIAL_STATE__或pageDataJSON 块 - JSON 解析后提取 skuId、price、stockQuantity、properties
- 清洗数据,输出结构化 SKU 清单
方案 2:Selenium/Playwright 模拟浏览器
适用场景 :需要登录、动态渲染、反爬严格的商品优点 :兼容性最强,可处理滑块、登录验证缺点:资源占用高、速度慢、易被指纹识别
实现步骤
- 启动无头浏览器,加载商品页
- 执行 JS 获取
window.__INITIAL_STATE__ - 直接返回 JSON 对象,避免 DOM 遍历
- 批量采集时配合代理与随机延时
三、Python 实战代码(静态提取版)
python
运行
import re
import json
import requests
# 请求头必须模拟浏览器
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
"Referer": "https://www.taobao.com/",
"Cookie": "你的淘宝登录Cookie(可选)"
}
def get_taobao_sku(goods_id):
url = f"https://item.taobao.com/item.htm?id={goods_id}"
resp = requests.get(url, headers=headers, timeout=10)
resp.raise_for_status()
# 正则匹配JSON数据
pattern = r"window.__INITIAL_STATE__\s*=\s*(\{.+?\});"
match = re.search(pattern, resp.text, re.S)
if not match:
return None
data = json.loads(match.group(1))
sku_list = data.get("skuInfo", {}).get("skus", [])
result = []
for sku in sku_list:
result.append({
"skuId": sku.get("skuId"),
"price": sku.get("prices", {}).get("price"),
"stock": sku.get("stock", {}).get("stockQuantity"),
"props": sku.get("properties"),
"status": "有货" if sku.get("status") == 1 else "无货"
})
return result
# 调用示例
if __name__ == "__main__":
print(json.dumps(get_taobao_sku("商品ID"), ensure_ascii=False, indent=2))
四、反爬应对与稳定性优化
- 请求头伪装必须带完整 UA、Accept、Referer,禁用 Python 原生标识
- Cookie 与登录态部分商品未登录仅显示模糊库存,登录后可获取精确数值
- IP 与频率控制单 IP 建议≤1 次 / 秒,批量使用短效代理池
- 异常处理捕获验证码页、商品下架、404 等状态
- 数据容错不同类目字段略有差异,增加多层级兜底判断
五、风险提示与合规说明
- 本方案仅用于学习研究,未经允许爬取平台数据可能违反《淘宝服务协议》与《网络安全法》
- 高频大规模采集会导致 IP 封禁、账号限制,甚至法律风险
- 商业场景优先使用淘宝开放平台 API,合法稳定无风控
六、总结
无需 API 的淘宝 SKU 爬虫,核心是定位前端内置 JSON,静态请求 + 正则即可实现轻量采集,模拟浏览器则解决复杂场景。该方案上手快、成本低,适合个人小规模监控与数据分析。