你想要获取京东关键词相关的 API 接口,以此替代传统爬虫,更合规、稳定地获取商品列表等信息,我会先讲解官方合规的 API 获取与使用方式(推荐),再说明非官方接口的情况(仅供学习),并给出具体的调用示例。
一、核心前提说明
京东没有向普通个人用户开放免费的关键词搜索 API,所有合法可用的接口均需通过「京东开放平台」申请,且多数接口要求企业资质,同时有调用频率限制和费用规则;非官方的第三方接口存在合规性、稳定性风险,仅建议用于技术学习。
二、京东开放平台(官方合规 API)
这是获取京东关键词相关数据的唯一合法途径,适合商用或合规的开发场景。
1. 京东开放平台入口
官网地址:https://open.jd.com/home/home#/index
2. 官方 API 申请与使用流程(分步详解)
步骤 1:注册开发者账号
- 进入开放平台后,点击「注册」→ 选择「开发者注册」;
- 「个人开发者」:仅能申请部分测试接口,商用功能(如商品搜索)受限;
- 「企业开发者」:需提供营业执照、法人信息等资质,审核通过后可申请商用接口(推荐合规场景使用)。
步骤 2:创建应用,获取核心凭证
- 账号登录后,进入「应用管理」→「创建应用」,填写应用名称、用途、回调地址等信息;
- 应用审核通过后,可在「应用详情」页获取:
AppKey:应用唯一标识(调用 API 时必填);AppSecret:应用密钥(用于生成 API 签名,需严格保密)。
步骤 3:对接商品搜索相关 API
京东开放平台中,与「关键词搜索商品」匹配的核心接口是:
- 接口名称:
jingdong.union.open.goods.promotion.query(京东联盟商品搜索接口); - 核心功能:根据关键词、分类、价格区间等条件查询商品信息(含标题、价格、佣金、链接等);
- 权限要求:需先入驻「京东联盟」(https://union.jd.com/),再在开放平台绑定联盟账号。
步骤 4:Python 调用官方 API 示例(完整可运行)
官方 API 调用的核心是签名生成(京东采用 MD5 签名防篡改),以下是简化示例:
python
运行
import requests import hashlib import time import json class JdOfficialAPI: def __init__(self, app_key, app_secret): self.app_key = app_key # 替换为你的AppKey self.app_secret = app_secret # 替换为你的AppSecret self.base_url = "https://router.jd.com/api" # 京东API网关固定地址 def _generate_sign(self, params): """生成API签名(京东API必填,规则必须严格遵循)""" # 1. 按参数名ASCII升序排序 sorted_params = sorted(params.items(), key=lambda x: x[0]) # 2. 拼接签名字符串(AppSecret + 参数名值对 + AppSecret) sign_str = self.app_secret for k, v in sorted_params: if v: # 跳过空值参数 sign_str += f"{k}{v}" sign_str += self.app_secret # 3. MD5加密并转大写 sign = hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper() return sign def search_goods(self, keyword, page=1, page_size=20): """ 调用京东联盟商品搜索API :param keyword: 搜索关键词 :param page: 页码(从1开始) :param page_size: 每页商品数(最大20) :return: 商品列表字典,失败返回None """ # 1. 构造基础参数(接口要求的固定参数) params = { "method": "jingdong.union.open.goods.promotion.query", # 接口方法名 "app_key": self.app_key, "format": "json", # 返回格式(固定为json) "v": "1.0", # 接口版本(固定为1.0) "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), # 北京时间戳 "page_index": page, # 页码 "page_size": page_size, # 每页条数 "keyword": keyword # 搜索关键词 } # 2. 生成签名并添加到参数中 params["sign"] = self._generate_sign(params) # 3. 发送请求 try: response = requests.get(self.base_url, params=params, timeout=10) result = response.json() # 校验调用结果 if result.get("code") == 0: return result.get("data", {}) # 返回商品数据 else: print(f"API调用失败:{result.get('msg')}(错误码:{result.get('code')})") return None except Exception as e: print(f"请求异常:{str(e)}") return None # 调用示例 if __name__ == "__main__": # 替换为你从开放平台获取的真实凭证 APP_KEY = "你的AppKey" APP_SECRET = "你的AppSecret" # 初始化API对象 jd_api = JdOfficialAPI(APP_KEY, APP_SECRET) # 调用关键词搜索接口 goods_data = jd_api.search_goods(keyword="Python编程", page=1, page_size=20) if goods_data: print("获取到的商品数据:") print(json.dumps(goods_data, ensure_ascii=False, indent=2))步骤 5:官方 API 关键注意事项
- 权限申请:商品搜索接口属于「京东联盟」权限,需先入驻京东联盟并绑定开放平台账号;
- 调用限制:官方 API 有 QPS(每秒调用次数)限制(通常 10 次 / 秒),超出会被限流;
- 费用规则:接口本身免费,但商品推广佣金需按京东联盟规则分成,部分高级接口按调用量收费;
- 签名规则:签名是调用成功的核心,参数必须 ASCII 升序排序、MD5 加密后转大写,否则会直接调用失败。
三、非官方 API 接口(仅供学习)
非官方接口是第三方开发者基于爬虫封装的 API,无需企业资质,但风险极高,仅适合个人技术学习。
1. 核心风险说明
- 合规性:未经京东授权,使用此类接口违反京东用户协议,商用可能被追责;
- 稳定性:接口随时可能失效(京东反爬升级 / 第三方服务器关停);
- 安全性:可能泄露你的请求数据,或被植入恶意代码。
2. 非官方 API 调用示例(仅学习)
python
运行
import requests import json def get_jd_goods_unofficial(keyword, page=1): """ 非官方京东商品搜索API调用(示例,接口可能已失效) """ # 替换为开源/口碑较好的非官方API地址 url = "https://api.example.com/jd/search" params = { "keyword": keyword, "page": page, "page_size": 20, "token": "test_token" # 部分非官方API需临时token } try: response = requests.get(url, params=params, timeout=10) if response.status_code == 200: return response.json() else: print(f"调用失败,状态码:{response.status_code}") return None except Exception as e: print(f"请求异常:{str(e)}") return None # 学习用调用示例 if __name__ == "__main__": data = get_jd_goods_unofficial("Python编程", page=1) if data: print(json.dumps(data, ensure_ascii=False, indent=2))3. 学习用注意事项
- 切勿将非官方 API 用于商业项目;
- 优先选择 GitHub 开源的非官方 API 项目(可自查代码安全性),避免未知来源的接口;
- 调用频率控制在「几分钟 1 次」,避免给第三方服务器造成压力。