Python 爬虫获取 item_get_web —— 淘宝商品 SKU、详情图、券后价全流程解析

一、接口定位:item_get_web 到底是什么?

item_get_web 并不是淘宝官方文档里的标准 API 名称,而是技术社区对「Web 端商品详情页」数据的统称,通常指同时包含:

  • SKU 规格、价格、库存

  • 5 张主图 + 详情图 URL

  • 优惠券信息(面额、有效期)

  • 券后价(原价 - 面额)

聚合接口自研爬虫方案

下面给出一条无需登录、可并发、10 行核心代码就能跑通的「Web 端爬虫」思路,并逐行拆解。


二、整体思路(4 步 30 行代码)

步骤 目标 核心 URL
获取商品 ID 任意搜索列表
拉取详情 JSON https://detailskip.taobao.com/json/iid={num_iid}
解析 SKU / 价格 / 券 JSON → pandas.DataFrame
批量下载图片 异步 aiohttp + aiofiles

三、完整源码(可直接跑)

python 复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re, json, asyncio, aiohttp, aiofiles
import pandas as pd
from urllib.parse import urljoin

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
    "Referer": "https://item.taobao.com/",
}

async def item_get_web(num_iid: str):
    """并发获取 SKU、券后价、详情图"""
    url = f"https://detailskip.taobao.com/json/iid={num_iid}&t={pd.Timestamp.now().value}"

    async with aiohttp.ClientSession() as ses:
        async with ses.get(url, headers=HEADERS) as resp:
            txt = await resp.text()
            data = json.loads(re.search(r"\(({.*})\)", txt).group(1))

    # ① SKU 表格化
    sku_list = []
    for sku in data["sku"]["skuMap"].values():
        sku_list.append({
            "skuId": sku["skuId"],
            "price": float(sku["price"]),
            "stock": int(sku["stock"]),
            "props": ";".join([f"{k}:{v}" for k, v in sku["propPath"].items()])
        })
    df_sku = pd.DataFrame(sku_list)

    # ② 券后价计算
    coupon = data.get("coupon") or {}
    original_price = df_sku["price"].min()
    denomination = float(coupon.get("denomination", 0))
    coupon_price = original_price - denomination

    # ③ 详情图列表
    desc_imgs = [
        urljoin("https:", img)
        for img in re.findall(r'"https:(//img[^"]+)"', data["desc"])
    ]

    return {
        "num_iid": num_iid,
        "title": data["item"]["title"],
        "original_price": original_price,
        "coupon_price": coupon_price,
        "sku_df": df_sku,
        "desc_imgs": desc_imgs
    }

async def download_img(url, path):
    async with aiohttp.ClientSession() as ses:
        async with ses.get(url) as resp:
            async with aiofiles.open(path, "wb") as f:
                await f.write(await resp.read())

async def main(num_iid: str):
    info = await item_get_web(num_iid)
    print(f'{info["title"]} 原价 ¥{info["original_price"]} 券后 ¥{info["coupon_price"]}')
    print("SKU 预览")
    print(info["sku_df"].head())
    # 异步下载详情图
    tasks = [download_img(u, f"{num_iid}_{i}.jpg")
             for i, u in enumerate(info["desc_imgs"][:20])]
    await asyncio.gather(*tasks)
    print("详情图下载完成")

if __name__ == "__main__":
    asyncio.run(main("728649613560"))   # 替换任意宝贝 ID

四、逐行拆解

行号块 关键知识 为什么这么做
url Web 端详情接口 淘宝 PC 页异步地址,返回 JSONP,无需登录
② 正则抠 JSON \(({.*})\) 接口用 JSONP 回调,需正则剥壳
③ SKU 表格化 skuMap price/stock/propPath,直接转 DataFrame 方便后续落库
④ 券后价计算 original - denomination 与官方逻辑一致,券信息在 data["coupon"] 节点
⑤ 详情图正则 re.findall 详情 HTML 被放在 data["desc"],一次性正则抽出所有 //img.alicdn.com 链接
⑥ 异步下载 aiohttp+aiofiles 详情图 20~60 张,同步下载耗时 10 s+,异步可压到 1 s

五、常见问题速查

现象 原因 解决
desc 为空 商品无图文详情 跳过或补默认值
403/滑块 IP 短时间 >200 次 单 IP 加 200 ms 延迟,或接代理池
图片 404 相对路径 //img urljoin("https:", url) 补全协议
券信息缺失 商品无优惠 denomination=0,券后价=原价

六、业务落地 3 案例

  1. 无货源搬家

    批量跑 item_get_web → 转存 SKU 图 + 详情图到 OSS → 生成新 HTML → 上传到拼多多/抖店,完成"一键搬家"。

  2. 比价工具

    每 30 min 轮询 Top 1000 SKU 的 coupon_price → 写回 Redis → 前端价格曲线实时可视化。

  3. 库存预警
    df_sku["stock"] < 10 自动发飞书机器人,提醒运营及时补货。


七、小结

item_get_web 的核心就是解析淘宝 Web 端 JSONP 接口 ,一次性拿到 SKU、价格、库存、优惠券、详情图 5 大类数据。

跑通上面 30 行代码,再叠加异步下载、图片转存、字段清洗,就能在选品、比价、ERP 搬家场景中快速上线。祝你"搬"得开心,单量长虹!

如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。

相关推荐
陈随易1 小时前
在 VSCode 里,把项目一键部署到服务器
前端·后端·程序员
Highcharts.js1 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
爱昏羔2 小时前
下篇:从检索到交互 — 物流RAG问答系统与WebUI全实现
python·langchain·agent
To_OC2 小时前
我被 useState 坑了两次之后,终于把它的脾气摸透了
前端·javascript·react.js
_Jimmy_2 小时前
Agent引用数据库知识过时的增量同步方案
人工智能·python·langchain
鱼樱前端2 小时前
我用 Claude Code 后,编码效率翻 3 倍。但更值钱的是别的。
前端·后端·ai编程
_lucas2 小时前
给知识库网站接入AI问答
前端·ai编程·全栈
前端糕手3 小时前
前端面试题大全:JavaScript + Vue3 + React + TypeScript + 工程化 + 性能优化
前端
min(a,b)3 小时前
学习第 4 天:面向对象与异常处理
python·学习·学习方法
我不叫武4 小时前
一个用 Rust 写的离线编码查询桌面工具
前端