别再爬淘宝了官方TOP API合法获取数据基础接口有免费额度附代码结论先行淘宝/天猫商品查询(taobao.item.get)、店铺在售列表(taobao.items.onsale.get)、订单同步(taobao.trades.sold.get)、物流轨迹均有免费调用额度只要企业实名应用 AppKey 调官方网关合法、稳定、不封IP、不触发风控。爬虫该退休了。一、为什么放弃爬虫选官方TOP API维度Selenium/Requests 爬虫淘宝开放平台 TOP API合法性⚠️ 违反ToS有法律风险✅ 签约开放平台合规稳定性页面改版即挂滑块验证棘手接口版本化管理数据质量HTML解析易缺字段结构化JSON含SKU/价格/库存限流IP被封明确免费QPS日额度企业可提维护成本高UA/代理/JS逆向几乎零签名调接口二、前置准备10分钟登录 淘宝开放平台→创建「自用型应用」企业支付宝认证订单/店铺接口必须商品公开查询个人可试但额度低应用详情页获取App KeyApp Secret申请接口权限taobao.item.get商品详情taobao.items.onsale.get店铺商品列表taobao.trades.sold.get订单列表taobao.trade.fullinfo.get订单明细taobao.logistics.trace.get物流轨迹如需订单/店铺私有数据 →卖家账号OAuth2授权换取 AccessTokensession参数三、Python完整源码 —— TOP API合法获取数据# top_legal_api.py 淘宝/天猫 TOP API 合法获取数据 Client 支持: 商品详情 / 店铺商品列表 / 订单列表需session 签名规则: 参数按key ASCII升序 → 拼 AppSecretKVAppSecret → MD5 → 大写 import hashlib import time import requests from typing import Dict, List, Optional from datetime import datetime, timedelta # 封装好API供应商demo urlhttps://console.open.onebound.cn/console/?iLex class TopLegalClient: 淘宝TOP API Client生产用 GATEWAY https://gw.api.taobao.com/router/rest SANDBOX https://gw.api.tbsandbox.com/router/rest def __init__(self, app_key: str, app_secret: str, sandboxFalse): self.ak app_key self.as_ app_secret self.gw self.SANDBOX if sandbox else self.GATEWAY # ───────────── 标准TOP MD5签名 ───────────── def _sign(self, params: Dict) - str: filt sorted((k, v) for k, v in params.items() if v is not None and str(v).strip() ! and k ! sign) qs .join(f{k}{v} for k, v in filt) return hashlib.md5(f{self.as_}{qs}{self.as_}.encode() ).hexdigest().upper() def _call(self, method: str, biz: Dict, session: str None) - Dict: p { method: method, app_key: self.ak, timestamp: str(int(time.time() * 1000)), # 毫秒 format: json, v: 2.0, sign_method: md5 } if session: p[session] session p.update(biz) p[sign] self._sign(p) r requests.post(self.gw, datap, timeout15) r.raise_for_status() d r.json() if error_response in d: err d[error_response] raise Exception( fTOP [{err.get(code)}]: {err.get(msg)} fsub:{err.get(sub_msg,)} ) return d.get(list(d.keys() - {error_response})[0], {}) # ──── ① 商品详情个人/企业均可公开字段不需session─── def get_item(self, num_iid: str, fields: str None, session: str None) - Dict: fields fields or ( num_iid,title,price,org_price,pic_url,item_imgs, skus,props_name,approve_status,num,outer_id,seller_nick,cid ) resp self._call( taobao.item.get, biz{num_iid: num_iid, fields: fields}, sessionsession ) return resp.get(item, resp) # ──── ② 店铺在售商品列表需企业卖家授权session─── def list_onsale(self, page_no1, page_size100, session: str None) - Dict: return self._call( taobao.items.onsale.get, biz{ page_no: page_no, page_size: min(page_size, 100), fields: num_iid,title,price,num,outer_id,approve_status }, sessionsession ) # ──── ③ 增量同步卖家订单需session─── def list_sold_orders(self, minutes_back30, page_no1, session: str None) - Dict: now datetime.now() start (now - timedelta(minutesminutes_back) ).strftime(%Y-%m-%d %H:%M:%S) end now.strftime(%Y-%m-%d %H:%M:%S) return self._call( taobao.trades.sold.get, biz{ fields: ( tid,status,payment,modified,buyer_nick, receiver_name,receiver_mobile,orders.num_iid, orders.title,orders.num,orders.price,orders.outer_sku_id ), start_modified: start, end_modified: end, page_no: page_no, page_size: 40 }, sessionsession ) # # 使用示例 # if __name__ __main__: client TopLegalClient( app_keyYOUR_APP_KEY, app_secretYOUR_APP_SECRET, sandboxFalse ) try: # ★ 商品详情 —— 不需session个人号也能跑 item client.get_item(654321098765) # ← 替换真实num_iid print(✅ 商品标题:, item.get(title)) print( 一口价: ¥, item.get(price)) print( 主图:, item.get(pic_url)) skus item.get(skus) or [] print(f SKU数:{len(skus)}) for s in skus[:2]: print(f {s.get(properties_name,默认)} f¥{s.get(price)} 库:{s.get(quantity)}) # ★ 店铺商品 / 订单 —— 需传卖家AccessToken # goods client.list_onsale(sessionSELLER_ACCESS_TOKEN) # orders client.list_sold_orders(sessionSELLER_ACCESS_TOKEN) except Exception as e: print(❌, e) print(→ 确认: AppKey/Secret正确、接口权限已申请、num_iid有效)四、免费额度说明2026版接口是否免费典型免费QPS日调用上限(企业)taobao.item.get✅ 免费≈5/s50万~100万taobao.items.onsale.get✅ 免费≈5/s同上taobao.trades.sold.get✅ 免费(基础)≈5~10/s同上(超量按基础计费¥极低)taobao.logistics.trace.get✅ 免费≈5/s—增值数据分析API 增值包—需购包中小企业做商品同步订单回写零API调用费QPS如不够可买资源包提频。五、高频避坑坑现象解决skus返回空查别人店铺商品公开数据不含库存自己店铺查须传seller AccessToken403 no permission调订单个人应用或未授权切企业应用 卖家OAuth授权Invalid Signature时间戳用秒必须int(time.time()*1000)偶发code7QPS超限令牌桶限速 QPS≤4免费上限5退避重试desc为空部分类目详情在独立接口补调taobao.item.desc.get六、面试/方案一句话淘宝/天猫数据用官方TOP APItaobao.item.get/taobao.trades.sold.get等合法获取基础接口有免费额度MD5签名按参数ASCII升序拼AppSecretKVAppSecret转大写查自己店铺SKU库存/订单须传卖家AccessTokenOAuth2授权完全替代爬虫规避风控与法律风险。需要我补TOP OAuth2授权码→AccessToken完整Python代码 或订单增量同步APScheduler脚本带断点续跑 吗