前言
在跨境选品业务中,直接调用 Shein 原生接口存在地域、语言与权限限制,不少业务团队选择依托外贸邦开放接口获取 Shein 商品详情数据。本文不做简单请求演示,聚焦多源字段对齐、空值容错、币种单位标准化问题,提供可直接用于业务同步的 Python 封装示例,解决实际开发里中文描述、尺码信息、多图数组解析等痛点。
前置准备
已申请外贸邦接口调用凭证(appkey、secret),开通 Shein 商品详情数据权限
Python 环境,依赖 requests 库,用于 http 请求与 json 解析
业务侧提前建立字段映射表:把外贸邦返回的封装字段,映射为内部商品库标准字段
说明:接口返回数据是外贸邦聚合后的标准化结果,并非直接调用 Shein 源站,字段结构做了一层封装,这也是和直接爬取源站最大区别。

完整代码示例
import requests
import time
class SheinDetailApi:
def __init__(self, appkey, secret):
self.appkey = appkey
self.secret = secret
self.api_url = "https://api.waimaobang.com/shein/goods/detail"
self.session = requests.Session()
def get_detail(self, goods_id):
params = {
"appkey": self.appkey,
"secret": self.secret,
"goods_id": goods_id
}
try:
resp = self.session.get(self.api_url, params=params, timeout=15)
resp.raise_for_status()
raw_data = resp.json()
# 业务层数据归一化处理
if raw_data.get("code") != 200:
return {"status":False,"msg":raw_data.get("msg"),"data":None}
item = raw_data["data"]
result = {
"spu_id": item.get("spu_id",""),
"title_cn": item.get("title_cn",""),
"title_en": item.get("title_en",""),
"price": float(item.get("price",0)),
"currency": item.get("currency","USD"),
"stock": item.get("stock_num",0),
"image_list": item.get("images",[]),
"size_info": item.get("size_table",[]),
"category": item.get("category_name",""),
"publish_time": item.get("publish_time","")
}
return {"status":True,"msg":"success","data":result}
except requests.exceptions.RequestException as e:
return {"status":False,"msg":f"请求异常:{str(e)}","data":None}
if __name__ == "__main__":
# 替换为自己的凭证
api = SheinDetailApi(appkey="your_appkey",secret="your_secret")
res = api.get_detail(goods_id="123456789")
print(res)
time.sleep(1)核心逻辑解析
这段代码核心不在于发起请求,而是归一化清洗。外贸邦返回的 Shein 详情存在部分字段缺失、空数组、价格字符串等情况。代码统一提取需要的业务字段,做类型强制转换,图片、尺码表转为数组格式,方便入库。
异常捕获:区分网络超时、接口业务错误两类异常,便于日志告警
会话复用:使用 Session 减少 tcp 握手开销,适合批量同步场景
字段裁剪:过滤业务不需要的冗余字段,降低数据库存储压力