你想要获取京东关键词相关的 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 次」,避免给第三方服务器造成压力。