×

python采集京东商品详情API接口,json数据返回

知名用户18007905473 知名用户18007905473 发表于2026-02-10 17:08:05 浏览8 评论0

抢沙发发表评论

你想通过 Python 调用京东商品详情 API 接口,并完整获取、解析返回的 JSON 数据,我会提供极简且可直接运行的代码,聚焦「API 请求 → JSON 数据完整获取 → 结构化解析 → 数据保存」全流程,同时说明 JSON 数据的核心结构和解析技巧,确保你能拿到完整的原始 JSON 数据并按需提取字段。

一、核心前提

  1. API 准备:使用聚合数据的京东商品详情 API(新手友好,免费试用),需先在聚合数据官网领取接口,获取AppKey

  2. 依赖安装:仅需requests库(发送 HTTP 请求):

    bash
    运行


二、完整代码(获取完整 JSON 数据)

python
运行
import requestsimport json# ===================== 配置项(替换为你的信息) =====================APP_KEY = "你的聚合数据AppKey"  # 替换成自己的AppKeySKU_ID = "100060195820"        # 京东商品ID(从商品URL提取)API_URL = "https://v.juhe.cn/jd/item/detail"# ====================================================================def get_jd_item_json():
    """调用京东API,获取完整的JSON返回数据并解析"""
    # 1. 构造请求参数(API必填)
    params = {
        "key": APP_KEY,
        "sku_id": SKU_ID    }

    # 2. 构造请求头(模拟浏览器,避免被拦截)
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    }

    try:
        # 3. 发送GET请求(设置10秒超时,避免卡死)
        response = requests.get(
            url=API_URL,
            params=params,
            headers=headers,
            timeout=10
        )

        # 4. 检查HTTP请求是否成功
        if response.status_code != 200:
            print(f"❌ HTTP请求失败,状态码:{response.status_code}")
            return None

        # 5. 获取原始JSON字符串(完整返回数据)
        raw_json_str = response.text        print("✅ 成功获取API返回的原始JSON数据:")
        print("-" * 50)
        print(raw_json_str)
        print("-" * 50)

        # 6. 解析JSON为Python字典(便于提取字段)
        json_data = json.loads(raw_json_str)

        # 7. 保存完整JSON数据到文件(便于后续分析)
        with open("jd_item_full_data.json", "w", encoding="utf-8") as f:
            # ensure_ascii=False:保留中文;indent=4:格式化缩进
            json.dump(json_data, f, ensure_ascii=False, indent=4)
        print("\n📄 完整JSON数据已保存到 jd_item_full_data.json 文件")

        # 8. 按需提取核心字段(示例)
        if json_data["error_code"] == 0:  # API调用成功
            item_detail = json_data["result"]  # 商品核心数据层
            core_fields = {
                "商品ID": item_detail.get("sku_id"),
                "商品标题": item_detail.get("title"),
                "价格": item_detail.get("price"),
                "库存状态": item_detail.get("stock_state"),
                "店铺名称": item_detail.get("shop_name"),
                "销量": item_detail.get("sales"),
                "商品主图": item_detail.get("pic_url"),
                "发货地": item_detail.get("delivery_place"),
                "库存数量": item_detail.get("stock_num"),
                "好评率": item_detail.get("good_rate")
            }
            print("\n🔍 提取的核心字段:")
            for key, value in core_fields.items():
                print(f"{key}:{value}")

        return json_data  # 返回解析后的字典

    except requests.exceptions.Timeout:
        print("❌ 请求超时:API响应过慢,请稍后重试")
    except requests.exceptions.ConnectionError:
        print("❌ 网络错误:检查网络或API地址")
    except json.JSONDecodeError:
        print("❌ JSON解析失败:API返回非标准JSON数据")
    except KeyError as e:
        print(f"❌ 字段缺失:{e}(可能是商品ID无效或API返回格式变更)")
    except Exception as e:
        print(f"❌ 未知错误:{str(e)}")
    return Noneif __name__ == "__main__":
    get_jd_item_json()

三、JSON 数据核心结构说明

聚合数据京东商品详情 API 返回的 JSON 分为「通用响应层」和「商品数据层」,完整结构如下(示例):
json
{
  "error_code": 0,          // 通用状态码:0=成功,非0=失败
  "reason": "success",      // 状态描述(失败时显示原因)
  "result": {               // 商品核心数据层(重点)
    "sku_id": "100060195820", // 商品ID(唯一)
    "title": "京东京造 轻量便携保温杯 350ml 白色", // 商品标题
    "price": "99.9",         // 价格(字符串类型)
    "original_price": "129.9", // 原价
    "sales": "10万+",        // 销量
    "stock_state": "有货",    // 库存状态
    "stock_num": "10000+",   // 库存数量
    "shop_name": "京东京造官方旗舰店", // 店铺名称
    "pic_url": "https://xxx.jpg", // 主图URL
    "brand": "京东京造",      // 品牌
    "delivery_place": "北京", // 发货地
    "good_rate": "98%",      // 好评率
    "spec_info": "颜色:白色|容量:350ml", // 规格
    "category": "家居>厨具>水杯>保温杯", // 分类
    "create_time": "2024-01-01" // 商品上架时间
    // 更多字段可参考聚合数据API文档
  }}

关键说明:

  1. 通用响应层error_code是首要判断依据(非 0 时reason会说明失败原因,如「APPKEY 不存在」「商品不存在」);

  2. 商品数据层result包含所有商品详情字段,字段值多为字符串类型(如价格"99.9",需手动转为浮点数);

  3. 字段兼容性:部分商品可能缺失部分字段(如小众商品无sales),需用dict.get()提取,避免KeyError

四、代码核心技巧

  1. 获取原始 JSON 字符串response.text会返回 API 返回的完整原始 JSON 字符串,适合需要分析完整数据结构的场景;

  2. 格式化保存 JSONjson.dump(..., ensure_ascii=False, indent=4)确保中文正常显示,且格式化缩进便于阅读;

  3. 安全提取字段:用item_detail.get("字段名")替代直接item_detail["字段名"],字段缺失时返回None,避免程序崩溃;

  4. 类型转换:价格、库存数量等字段是字符串,如需计算需转为数值类型(如float(item_detail.get("price", 0.0)))。

五、常见问题及解决

表格
问题现象原因解决方法
返回 JSON 中error_code=10001AppKey 错误 / 未激活核对聚合数据的 AppKey,确认接口已领取并完成实名认证
返回 JSON 中resultnull商品 ID 无效 / 商品下架从京东商品 URL 重新提取 SKU_ID(纯数字),确认商品未下架
JSON 保存后中文乱码编码问题保存时指定encoding="utf-8",且json.dumpensure_ascii=False
提取字段时提示KeyError字段名错误 / 字段缺失查看保存的jd_item_full_data.json,确认字段名;改用get()方法提取

总结

  1. 核心流程:构造请求参数 → 发送请求 → 获取原始 JSON → 解析为字典 → 提取 / 保存数据;

  2. 关键配置:替换APP_KEYSKU_ID,确保请求头包含User-Agent

  3. 数据处理:优先保存完整 JSON 数据,提取字段时用get()保证程序稳定性;

  4. 扩展方向:可循环调用接口批量获取多个商品 JSON,或结合pandas解析批量数据。

这套代码能帮你快速获取京东商品详情 API 的完整 JSON 返回数据,既适合新手学习 JSON 结构,也能直接用于实际项目中的数据采集。


群贤毕至

访客