写给小二开发、无货源搬家、比价/导购站、ERP 上货——10 分钟拿到“图文详情”HTML 源码。
一、接口定位:官方没有,为什么还要它?
- 淘宝/天猫开放平台最高权限接口不返回图文详情,只给标题、价格、SKU 等静态字段。
- 真正“白底图 + 文案 + 视频”的详情页,来自 PC 端异步地址:
https://detailskip.taobao.com/json/desc/get_desc.do?itemId={num_iid}
返回 gzip 压缩后的 HTML 片段,正是手机端图文详情的原始数据。 - 想做无货源批量搬家、比价、内容电商,必须拿到这段 HTML,否则只能手工复制。
二、请求流程 4 步(先通览,再拆代码)
| 步骤 | 关键动作 | 是否可并发 |
|---|---|---|
| ① 取商品 ID | 从搜索/列表页解析 num_iid | ✅ |
| ② 请求 desc 接口 | detailskip.taobao.com/json/desc/get_desc.do | ✅ |
| ③ 解压+解码 | zlib.decompress → HTML | ❌ |
| ④ 清洗入库 | 去外跳、补全协议、下载图片 | ✅ |
三、完整源码(Python 3.x)
Python
import re, json, gzip, time, requestsfrom urllib.parse import unquotefrom bs4 import BeautifulSoup
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/",}def get_desc_html(num_iid: str) -> str:
"""
获取淘宝/天猫商品图文详情 HTML
:param num_iid: 商品数字 ID
:return: 清洗后的 HTML 字符串
"""
# ① 组装 URL(带时间戳防缓存)
url = (f"https://detailskip.taobao.com/json/desc/get_desc.do?"
f"itemId={num_iid}&t={int(time.time()*1000)}")
rsp = requests.get(url, headers=HEADERS, timeout=10)
rsp.raise_for_status()
# ② 返回是 JSONP: descUrl({"data":{"desc":"..."}})
jsonp = rsp.text
data = json.loads(re.search(r"\(({.*})\)", jsonp).group(1))
raw = data["data"]["desc"] # 仍是 urlencode+gzip 双重压缩
# ③ 解码:先 urldecode → 再 gzip
html = unquote(raw, encoding="gbk")
html = gzip.decompress(html.encode("latin1")).decode("gbk")
# ④ 清洗:去掉外跳、补全图片协议
soup = BeautifulSoup(html, "lxml")
for img in soup.find_all("img"):
src = img.get("src") or ""
if src.startswith("//"):
img["src"] = "https:" + src return str(soup)# —— ⑤ CLI 快速体验 —— #if __name__ == "__main__":
html = get_desc_html("728649613560") # 换成任意宝贝 ID
with open("desc.html", "w", encoding="utf-8") as f:
f.write(html)
print("图文详情已写入 desc.html,共 %.1f KB" % (len(html)/1024))四、逐行代码解析
| 行号区间 | 关键知识 | 为什么这么做 |
|---|---|---|
① url 拼接 | 时间戳 t | 防 CDN 缓存,避免拿到旧描述 |
② jsonp 正则 | descUrl({...}) | 接口返回的是 JSONP,非标准 JSON,需要正则抠括号 |
| ③ 双重压缩 | urlencode + gzip | 淘宝为了节省流量,先 gzip 再 urlencode;顺序反了会乱码 |
④ BeautifulSoup | 清洗 HTML | 去掉外跳、补全 //img.alicdn.com 协议,防止后期 404 |
| ⑤ 写文件 | 本地调试 | 直接双击 desc.html 即可看到与手淘一致的图文详情 |
五、返回长什么样?
接口原始 JSONP 示例(截断):
JavaScript
descUrl({
"data": {
"desc": "%1F%8B%08%00...(略)"
}})解压后得到标准 HTML,结构类似:
HTML
<div class="content">
<p><img src="https://img.alicdn.com/imgextra/i3/220668653254/O1CN01abc_!!220668653254.jpg" /></p>
<p>【商品卖点】……</p>
<table> …… </table></div>可直接入库或渲染到小程序/WebView。
六、常见坑点 & 解决方案
| 坑点 | 现象 | 解决 |
|---|---|---|
| 返回“desc”为空 | 商品无详情或 ID 错误 | 先浏览器打开 detailskip 地址确认 |
| gzip 解码报错 | UnicodeDecodeError | 确保先 unquote→latin1→gzip→gbk 顺序 |
| 图片 404 | 相对路径 //img | 统一替换成 https:// |
| 触发滑块 | 偶尔 403 | 加 timeout + 随机 UA + 重试 3 次即可 |
| 频率限制 | 同 IP 连续 200 次后慢速 | 单线程 200 ms 延迟基本安全 |
七、业务落地 3 案例
- 无货源 ERP
批量调用get_desc_html→ 清洗 → 把图片转存 OSS → 生成新的desc.html→ 上传到拼多多/抖店,完成“一键搬家”。 - 比价/导购站
把desc里的图片 URL 单独抽出 → 做图片指纹对比 → 发现竞品更新立即推送钉钉。 - 小程序富文本
清洗后的 HTML 直接喂给rich-text组件;视频封面单独抽出来放在首图,提升停留时长。
八、小结
item_get_desc 本质就是淘宝前端自己的详情加载接口,无签名、无 token、无 QPS 限制,但返回的是“压缩+编码”的 HTML。
只要按顺序解压、解码、清洗,就能 100 % 还原手淘图文详情。跑通上面 30 行代码,再叠加你自己的图片转存、字段正则、敏感词过滤,就能在搬家、比价、内容电商场景中快速上线。祝你“搬”得开心,单量长虹!
只要按顺序解压、解码、清洗,就能 100 % 还原手淘图文详情。跑通上面 30 行代码,再叠加你自己的图片转存、字段正则、敏感词过滤,就能在搬家、比价、内容电商场景中快速上线。祝你“搬”得开心,单量长虹!
如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。