京东关键词API接口获取

你想要获取京东关键词相关的 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 次」,避免给第三方服务器造成压力。
相关推荐
罗光记2 小时前
《人工智能安全治理研究报告(2025年)发布
数据库·其他·百度·新浪微博
202321336054 刘2 小时前
Linux常用命令分类整理
linux·运维·数据库
Q741_1472 小时前
海致星图招聘 数据库内核研发实习生 一轮笔试 总结复盘(2) 作答语言:C/C++ 哈夫曼编码 LRU
c语言·数据库·c++·算法·笔试·哈夫曼编码·哈夫曼树
齐 飞3 小时前
快速删除mysql表中所有数据-TRUNCATE TABLE
数据库·mysql
想摆烂的不会研究的研究生3 小时前
每日八股——Redis(2)
数据库·redis·缓存
optimistic_chen3 小时前
【Redis系列】主从复制
linux·数据库·redis·缓存·中间件·命令行·主从复制
一个天蝎座 白勺 程序猿3 小时前
KingbaseES 处理 PL/SQL 运行时错误全解析:从异常捕获到异常处理的实践指南
数据库·sql·oracle·kingbasees
leo_2323 小时前
表&表结构--SMP(软件制作平台)语言基础知识之三十三
数据库·开发工具·表结构·smp(软件制作平台)·应用系统
C***11503 小时前
Spring TransactionTemplate 深入解析与高级用法
java·数据库·spring