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

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

相关推荐
云草桑9 小时前
15分钟快速了解 Odoo
数据库·python·docker·postgresql·.net·odoo
m0_7066532310 小时前
Python入门:从零到一的第一个程序
jvm·数据库·python
reasonsummer10 小时前
【办公类-53-09】20260131Python模仿制作2025学年第二学期校历(excel+pdf)
python·pdf
2301_7657031410 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
Stuomasi_xiaoxin10 小时前
Windows 安装 OpenCode 完全指南:从 npm 踩坑到 Chocolatey 完美部署
python·ai编程·opencode
可问春风_ren10 小时前
Vue3 入门详解:从基础到实战
开发语言·前端·javascript·vue.js·前端框架·ecmascript·edge浏览器
2301_7903009610 小时前
深入理解Python的if __name__ == ‘__main__‘
jvm·数据库·python
m0_6632340110 小时前
Libvio.link爬虫技术全解析
爬虫
我的xiaodoujiao10 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 45--生成项目需要的requirements.txt依赖文件
python·学习·测试工具·pytest
一起养小猫10 小时前
Flutter for OpenHarmony 实战:从零开发一款五子棋游戏
android·前端·javascript·flutter·游戏·harmonyos