我给你一套最简单、最稳定、可直接复制运行的京东商品详情 API 调用代码,包含:
签名生成 → 接口请求 → 数据解析 → 异常处理你只需要替换自己的 AppKey、AppSecret、AccessToken 就能用。
一、你需要提前准备
- 京东开放平台创建应用
- 获取:
app_keyapp_secretaccess_token(店铺授权)
- 安装依赖
bash
运行
pip install requests
二、京东商品详情 API 核心接口
我们使用 官方最标准、数据最全 的两个接口:
- 单品详情:
jingdong.item.read.get - 批量详情:
jingdong.item.list.get(一次最多 20 个)
三、完整 Python 代码(直接运行)
1. 京东 API 客户端(签名 + 请求自动处理)
python
运行
import requests import hashlib import time class JDClient: def __init__(self, app_key, app_secret, access_token): self.app_key = app_key self.app_secret = app_secret self.access_token = access_token self.api_url = "https://api.jd.com/routerjson" # 京东官方签名算法(必须正确,否则调用失败) def sign(self, params): # 按 key 字典序排序 sorted_items = sorted(params.items()) # 拼接成字符串 param_str = "".join(f"{k}{v}" for k, v in sorted_items) # 前后加 app_secret 再 MD5 sign_src = self.app_secret + param_str + self.app_secret # 转大写 return hashlib.md5(sign_src.encode()).hexdigest().upper() # 通用请求方法 def request(self, method, params): public_params = { "method": method, "app_key": self.app_key, "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), "format": "json", "v": "2.0", "access_token": self.access_token } # 合并公共参数 + 业务参数 all_params = {**public_params, **params} # 生成签名 all_params["sign"] = self.sign(all_params) try: resp = requests.post(self.api_url, data=all_params, timeout=10) return resp.json() except Exception as e: return {"error": str(e)}
2. 获取【单个商品】详情(最常用)
python
运行
# ====================== 配置信息(换成你自己的) ====================== APP_KEY = "你的APP_KEY" APP_SECRET = "你的APP_SECRET" ACCESS_TOKEN = "你的ACCESS_TOKEN" SKU_ID = "100012345678" # 京东商品ID # 初始化客户端 client = JDClient(APP_KEY, APP_SECRET, ACCESS_TOKEN) # 获取商品详情 def get_jd_item_detail(sku_id): params = { "sku_id": sku_id, "fields": "sku_id,title,price,image_url,brand_info,sku_list,sku_property" } return client.request("jingdong.item.read.get", params) # 调用 if __name__ == "__main__": result = get_jd_item_detail(SKU_ID) print("京东商品详情返回:") print(result)
3. 获取【批量商品】详情(一次 20 个)
python
运行
def get_jd_item_batch(sku_ids): params = { "sku_ids": ",".join(sku_ids), # 逗号分隔,最多20个 "fields": "sku_id,title,price,image_url" } return client.request("jingdong.item.list.get", params) # 调用示例 # batch_result = get_jd_item_batch(["100012345678", "100087654321"]) # print(batch_result)
四、接口返回 JSON 示例(真实结构)
json
{ "jingdong_item_read_get_response": { "result": { "code": 0, "msg": "success", "item": { "sku_id": "100012345678", "title": "小米14 12+256GB 黑色", "price": "3999.00", "image_url": "https://img14.360buyimg.com/xxx.jpg", "brand_info": { "brand_name": "小米" }, "sku_list": [ {"sku_id": "100012345678","price":"3999.00","properties":"颜色:黑色"}, {"sku_id": "100012345679","price":"4299.00","properties":"颜色:白色"} ] } } } }
五、最简单的数据解析代码
python
运行
def parse_item(result): try: item = result["jingdong_item_read_get_response"]["result"]["item"] return { "sku_id": item["sku_id"], "标题": item["title"], "价格": item["price"], "主图": item["image_url"], "品牌": item["brand_info"]["brand_name"] } except: return "解析失败" # 使用 data = parse_item(result) print("解析后数据:", data)
六、调用频率限制(必须遵守)
- QPS:2 次 / 秒
- 日调用:1000 次 / 天
- 批量一次最多 20 个商品
- 超限错误码:10003
七、我能帮你继续扩展
你需要我给你写:
- 自动翻页批量采集
- 保存到 Excel/MySQL
- 限流 + 重试防封
- SPU + 所有 SKU 完整采集