Python 调用淘宝商品详情 API:异常处理完整方案(生产级可用)

知名用户180079054734个月前未分类195
在实际调用淘宝 API 时,异常几乎一定会出现,比如:网络超时、签名错误、商品下架、限流、服务器异常等。
如果不处理异常,程序会直接崩溃。
我给你一套自带完整异常处理、可直接上线使用的代码,包含:
  1. 网络异常

  2. 超时异常

  3. JSON 解析异常

  4. 业务错误(权限、限流、商品不存在)

  5. 签名错误

  6. 限流自动等待

  7. 重试机制

一、最终效果

  • 出错不崩溃

  • 自动提示错误原因

  • 限流自动等待

  • 失败自动重试

  • 返回结构化结果,方便业务使用


二、完整代码(带异常处理 ✅ 直接复制运行)

python
运行
import requestsimport hashlibfrom datetime import datetimefrom time import sleep# ===================== 配置 =====================APP_KEY = "你的AppKey"APP_SECRET = "你的AppSecret"MAX_RETRY = 3  # 最大重试次数TIMEOUT = 5  # 请求超时时间# ===================== 签名函数 =====================def create_sign(params, secret):
    try:
        sorted_params = sorted(params.items())
        base_str = ''.join(f"{k}{v}" for k, v in sorted_params)
        base_str = secret + base_str + secret        return hashlib.sha256(base_str.encode('utf-8')).hexdigest().upper()
    except Exception as e:
        raise Exception(f"签名失败:{str(e)}")# ===================== 带异常处理的API调用 =====================def get_taobao_item_detail(num_iid):
    url = "https://eco.taobao.com/router/rest"

    params = {
        "method": "taobao.item.get",
        "app_key": APP_KEY,
        "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        "format": "json",
        "v": "2.0",
        "num_iid": num_iid,
        "fields": "num_iid,title,price,pic_url,sku,detail_url,sold_quantity,volume"
    }

    # 重试机制
    for retry in range(MAX_RETRY):
        try:
            # 1. 生成签名
            params["sign"] = create_sign(params, APP_SECRET)

            # 2. 发送请求(捕获超时、网络、连接错误)
            resp = requests.post(url, data=params, timeout=TIMEOUT)

            # 3. HTTP状态异常
            if resp.status_code != 200:
                return {"code": -1, "msg": f"HTTP错误:{resp.status_code}"}

            # 4. JSON解析异常
            try:
                result = resp.json()
            except:
                return {"code": -1, "msg": "JSON解析失败"}

            # 5. 淘宝API业务错误判断
            if "error_response" in result:
                code = result["error_response"].get("code", "")
                sub_msg = result["error_response"].get("sub_msg", "未知错误")

                # 限流 → 自动等待
                if code == "429" or "调用频率超限" in sub_msg:
                    sleep_time = (retry + 1) * 2
                    print(f"限流,等待 {sleep_time} 秒重试...")
                    sleep(sleep_time)
                    continue

                # 商品不存在
                elif code == "27":
                    return {"code": 27, "msg": "商品不存在或已下架"}

                # 无权限
                elif code == "11":
                    return {"code": 11, "msg": "无API调用权限"}

                # 签名错误
                elif code == "15":
                    return {"code": 15, "msg": "签名错误(密钥/时间/参数异常)"}

                # 其他错误
                else:
                    return {"code": code, "msg": f"业务异常:{sub_msg}"}

            # 6. 正常返回
            return {"code": 200, "msg": "success", "data": result}

        # 网络超时
        except requests.exceptions.Timeout:
            print(f"超时,重试 {retry+1}/{MAX_RETRY}")
            sleep(1)

        # 网络连接失败
        except requests.exceptions.ConnectionError:
            return {"code": -1, "msg": "网络连接失败"}

        # 未知异常
        except Exception as e:
            return {"code": -1, "msg": f"系统异常:{str(e)}"}

    return {"code": -1, "msg": "超过最大重试次数"}# ===================== 测试调用 =====================if __name__ == '__main__':
    item_id = "689000000000"
    res = get_taobao_item_detail(item_id)
    print(res)

三、代码处理了哪些异常?(全覆盖)

1. 网络异常

  • 断网

  • 连接失败

  • DNS 错误

2. 请求超时

  • 淘宝服务器慢

  • 网络波动

3. JSON 解析失败

  • 返回非 JSON 内容

  • 数据不完整

4. HTTP 错误

  • 500/502/403/404

5. 淘宝 API 业务异常

  • 27 → 商品不存在 / 下架

  • 11 → 无权限

  • 15 → 签名错误

  • 429 → 调用频率超限(限流)

  • 服务器异常

6. 签名函数异常

  • 参数格式错误

  • 编码异常

7. 未知异常

  • 程序崩溃保护


四、异常处理的核心策略(非常重要)

1. 限流异常 → 自动等待 + 重试

等待时间:1s → 2s → 4s(指数退避)

2. 超时 / 网络 → 重试

最多重试 3 次,避免单次波动失败

3. 业务错误 → 明确返回错误信息

不抛错,方便上层业务判断

4. 所有异常都被捕获

程序绝对不会崩溃

五、返回结果格式(统一规范)

成功

json
{"code":200, "msg":"success", "data": {...商品数据...} }

失败

json
{"code":27, "msg":"商品不存在或已下架"}{"code":11, "msg":"无API调用权限"}{"code":15, "msg":"签名错误"}{"code":429, "msg":"调用频率超限"}

六、你可以直接用这个代码做

✅ 闲鱼无货源商品采集
✅ 自动铺货脚本
✅ 商品监控系统
✅ 比价小程序后端
✅ 高并发稳定采集


相关文章

淘宝商品详情API实战解析:解锁电商全场景高效运营新路径

前言在数字化电商运营浪潮中,数据是核心竞争力,而淘宝商品详情API作为淘宝开放平台的核心接口,是合规获取商品全量结构化数据的“金钥匙”。不同于传统爬虫的高风险、低稳定性,淘宝商品详情API凭借官方授权...

京东商品详情 API 介绍、业务场景与完整 JSON 返回参考

一、接口简介京东商品详情 API(联盟接口jd.union.open.goods.detail.query、商家接口jingdong.item.read.get),通过 SKU 编号查询商品完整信息,...

速卖通商品详情接口的核心详情接口是什么?

速卖通获取商品详情的官方核心接口是:aliexpress.item.get(旧版)与 aliexpress.solution.product.detail.get(新版 / 推荐)。一、核心详情接口(...

京东商品评论API接口能返回那些参数?

京东官方评论 API(如 jd.item.review.list.get)返回的 JSON 数据非常完整,包含状态、统计、用户、评论内容、多媒体、规格、商家回复等几十种字段。下面按模块清晰列出所有常用...

淘宝京东1688商品详情API接口系列,json数据返回

淘宝、京东、1688的商品详情API接口均通过JSON格式返回数据,涵盖商品基础信息、价格、库存、图片、规格、评价等核心字段。以下是各平台接口的详细说明及JSON数据示例:一、淘宝商品详情API接口核...

python采集速卖通商品评论API接口系列,json数据返回

以下是采集速卖通商品评论的 Python 代码示例,通过调用相关 API 接口获取评论数据并以 JSON 格式返回。代码实现了分页获取评论、处理不同类型评论(带图 / 好评 / 中评 / 差评)等功能...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。