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 搬家场景中快速上线。祝你"搬"得开心,单量长虹!

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

相关推荐
橙子家3 小时前
浏览器缓存之【基础键值存储】:Local storage 和 Session storage
前端
程序员龙叔5 小时前
编写高质量 Skill 系列 -- 如何设计需求分析与用例生成的 SKILL
自动化测试·软件测试·python·软件测试工程师·接口测试·性能测试·skill·ai测试
星星在线5 小时前
MusicFree:一个「All in One」的个人音乐服务器,让听歌回归简单
前端·后端
IT_陈寒6 小时前
Redis的SETNX并发问题让我加了三天班
前端·人工智能·后端
demo007x6 小时前
Docling 文档转换以及技术架构分析
前端·后端·程序员
京东云开发者7 小时前
京东市民服务又“上新”!这次是黑龙江“龙易办”
前端
袋鱼不重8 小时前
我的神奇同事,AI 用多了居然写了个 Open In Codex
前端·后端·ai编程
用户8356290780518 小时前
使用 Python 操作 Word 内容控件
后端·python
Fireworks8 小时前
深入vue3源码解读 -- 1、响应式的基础概念
前端
程序员黑豆8 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程