一、接口定位:官方 VS 非官方两条路
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
① 官方 taobao.item_video |
高稳定、合法、带封面/时长/MP4 直链 | 需企业账号、申请权限、1 k 次/日限额 | 比价平台、正规选品、内容中台 |
| ② Web 端逆向(detailskip) | 无门槛、可并发、无限额 | 随时可能 403、需签名校验 | 无货源搬家、数据分析、内部工具 |
下面把两条路线都给出「最小可运行」代码,并逐行拆解,方便你按业务场景二选一。
二、路线 ①:官方接口 10 行拿到 MP4
0)前置准备
-
登入开放平台→ 创建「网站应用」→ 审核通过拿到 AppKey / AppSecret
-
能力管理里搜索
taobao.item_video并勾选,免费档 1 000 次/天,秒批。 -
用 client_credentials 换 token(机器号模式,无需用户授权):
python
import requests, time, hashlib
APP_KEY = "你的AppKey"
APP_SECRET = "你的AppSecret"
def get_token():
url = "https://oauth.taobao.com/token"
params = dict(grant_type="client_credentials",
client_id=APP_KEY,
client_secret=APP_SECRET,
timestamp=time.strftime("%Y-%m-%d %H:%M:%S"))
return requests.post(url, data=params).json()["access_token"]
1)签名算法(淘宝全系通用)
python
def _sign(params: dict) -> str:
params = {k: v for k, v in params.items() if v is not None}
string = APP_SECRET + "".join(f"{k}{v}" for k, v in sorted(params.items())) + APP_SECRET
return hashlib.md5(string.encode()).hexdigest().upper()
2)获取视频信息
python
def item_video(num_iid: str, token: str):
url = "https://eco.taobao.com/router/rest"
params = dict(method="taobao.item_video",
app_key=APP_KEY,
access_token=token,
timestamp=time.strftime("%Y-%m-%d %H:%M:%S"),
format="json", v="2.0", sign_method="md5",
num_iid=num_iid,
fields="url,duration,cover_url")
params["sign"] = _sign(params)
res = requests.post(url, data=params).json()
if "error_response" in res:
raise RuntimeError(res["error_response"]["msg"])
return res["item_video_response"]["video"] # 含 url/cover_url/duration
3)下载视频
python
def download(mp4_url: str, filename: str):
with requests.get(mp4_url, stream=True, headers={"User-Agent": HEADERS["User-Agent"]}) as r:
with open(filename, "wb") as f:
for chunk in r.iter_content(chunk_size=1024 * 64):
if chunk:
f.write(chunk)
print("saved", filename)
4)一键体验
python
if __name__ == "__main__":
tk = get_token()
video = item_video("728649613560", tk) # 替换成任意宝贝 ID
download(video["url"], f'{video["duration"]}ms.mp4')
输出示例:
saved 15000ms.mp4
字段说明:
-
url→ 9~30 秒主图视频 MP4 直链 -
cover_url→ 封面 800×800 JPG -
duration→ 毫秒,15 000 即 15 s
三、路线 ②:Web 端逆向(零门槛、可并发)
适合"今天就要数据"的场景,无需申请权限,但需做好 403 重试 + 签名校验。
1)寻找视频 ID
打开任意宝贝 → F12 → 过滤 getVideo → 得到请求:
https://h5api.m.taobao.com/h5/mtop.taobao.detail.getvideo/1.0/?jsv=2.6.1&appKey=12574478&t=...&sign=...&data={"itemId":"728649613560","videoType":"main"}
返回 JSONP:
mtopjsonp123({"data":{"videoId":"391542685934","coverUrl":"//img.alicdn.com/..."}})
2)Python 模拟(带自动签名)
python
import requests, time, json, random, hashlib
from urllib.parse import quote
APP_KEY = "12574478" # 固定公钥
APP_SECRET = "" # Web 端空 secret
def h5_sign(data: str, t: str) -> str:
# 淘宝 H5 简化版签名:md5(appSecret + t + data + appSecret)
return hashlib.md5((APP_SECRET + t + data + APP_SECRET).encode()).hexdigest()
def get_video_id(num_iid: str):
t = str(int(time.time() * 1000))
data = json.dumps({"itemId": num_iid, "videoType": "main"}, separators=(",", ":"))
params = dict(jsv="2.6.1", appKey=APP_KEY, t=t,
api="mtop.taobao.detail.getvideo", v="1.0",
type="jsonp", dataType="jsonp",
callback=f"mtopjsonp{random.randint(1000, 9999)}",
data=data, sign=h5_sign(data, t))
url = "https://h5api.m.taobao.com/h5/mtop.taobao.detail.getvideo/1.0/"
r = requests.get(url, params=params, headers=HEADERS)
return json.loads(re.search(r"\((.+?)\)", r.text).group(1))["data"]
3)视频播放地址解析
拿到 videoId 后继续请求:
https://v.taobao.com/video/play?videoId=391542685934&format=mp4&definition=720p
会 302 到真正的 MP4,直接 requests.get(allow_redirects=True) 即可下载。
四、批量下载加速(协程 50 并发)
python
import aiohttp, aiofiles, asyncio
async def aio_download(url: str, path: str):
async with aiohttp.ClientSession() as sess:
async with sess.get(url) as resp:
async with aiofiles.open(path, "wb") as f:
async for chunk in resp.content.iter_chunked(1024 * 64):
await f.write(chunk)
async def batch_download(iids: list):
sem = asyncio.Semaphore(50)
async def task(num_iid):
async with sem:
video = item_video(num_iid, token) # 官方路线
await aio_download(video["url"], f"{num_iid}.mp4")
await asyncio.gather(*[task(iid) for iid in iids])
五、常见坑 & 合规提示
| 坑点 | 解决方案 |
|---|---|
官方接口报 access_control_exceeded |
免费档 1 000 次/天,次日 0 点重置;或升级付费套餐 |
| Web 端 403 | 加 200 ms 延迟 + 随机 UA + 代理池 |
| 视频为空 | 部分类目/老店无视频,属于正常 |
| 版权风险 | 视频版权归卖家/淘宝所有,仅限内部数据分析、官方活动投放,禁止直接二次销售或公开分发 |
六、小结
item_video 的核心就是两条路:
-
官方 → 高稳定、带签名、直接给 MP4 直链,10 行代码即可落地;
-
Web 逆向 → 零门槛、需签名校验,适合"今天就要数据"的紧急需求。
跑通上面任意一段代码,再叠加异步下载、图片/视频转存、字段清洗,就能在选品、比价、无货源搬家、社媒投放等场景中快速上线。祝你"搬"得开心,单量长虹!
如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。