淮安市网站建设_网站建设公司_展示型网站_seo优化
2026/1/7 14:08:26 网站建设 项目流程

京东关键词搜索接口获取商品数据 实操指南

本指南聚焦京东开放平台合规接口item_search基础版 /item_search_pro增强版),提供从账号准备→接口调用→数据解析→落地应用的全流程实操步骤,确保新手也能快速完成商品数据获取,适配电商选品、竞品分析、运营监控等核心场景。

一、 实操前置:合规准备与核心凭证获取

京东关键词接口属于官方开放接口,需完成开发者认证与权限申请,严禁未经授权的爬虫抓取,否则会面临 IP 封禁、法律风险。

1. 账号与权限准备(3 步完成)

步骤操作内容详细指引
1注册京东开放平台开发者账号访问 京东开放平台官网 → 点击 “开发者注册” → 选择个人 / 企业身份完成实名认证(企业需提供营业执照,个人需提供身份证)
2创建应用并申请接口权限登录后进入 “应用管理” → 点击 “创建应用” → 填写应用名称、用途(如 “商品数据采集与选品分析”) → 提交审核 → 审核通过后,在 “权限管理” 中申请「商品搜索接口」(基础版item_search或增强版item_search_pro
3获取核心调用凭证应用审核通过后,在 “应用详情” 页查看并保存AppKey(应用唯一标识)、AppSecret(密钥)→ 这两个参数是接口调用的核心,需妥善保管,避免泄露

注意:item_search_pro属于高级接口,需单独申请权限,审核周期比基础版长 1-2 个工作日。

2. 工具准备

  • 开发环境:Python/Java/PHP(推荐 Python,代码简洁易上手)
  • 依赖工具:Python 需安装requests库(pip install requests)、Java 需安装HttpClient、PHP 需开启curl扩展
  • 辅助工具:Postman(接口调试)、Excel/MySQL(数据存储)

二、 核心配置:接口参数与签名算法(必掌握)

京东 API 采用“参数 + 签名”验证机制,签名错误是调用失败的最常见原因,需严格按以下步骤配置。

1. 接口参数分类(公共参数 + 业务参数)

(1) 公共参数(所有接口通用,必填)
参数名取值要求示例值
app_key应用详情页获取的AppKey1234567890
method接口名称,基础版填jd.union.open.goods.search;增强版填jd.union.open.goods.search.projd.union.open.goods.search
format响应格式,固定为jsonjson
v接口版本,基础版用3.0;增强版用4.03.0
timestamp请求时间戳,格式yyyy-MM-dd HH:mm:ss(需与京东服务器时间一致,误差≤5 分钟)2026-01-08 10:30:00
sign签名值,通过 HMAC-SHA256 算法生成(下文详细说明)8F7A6B5C4D3E2F1A9087654321ABCDEF
(2) 业务参数(关键词搜索核心参数)
参数名必填取值说明示例值
keyword搜索关键词,支持多词组合(空格分隔)无线蓝牙耳机 主动降噪
page页码,默认 1,基础版最大 50 页;增强版最大 100 页1
page_size每页条数,默认 30,基础版最大 50;增强版最大 10050
sort_type排序方式:price_asc(低价)、sales_desc(销量)、real_sales_desc(增强版实时销量)sales_desc
price_from/price_to价格区间筛选(增强版专属)100/300

2. 签名算法实操(3 步生成,以 Python 为例)

签名是京东 API 的核心验证环节,步骤如下:

  1. 参数排序:将所有公共参数 + 业务参数,按参数名 ASCII 码升序排列(如app_keyformatkeywordmethod...)
  2. 拼接字符串:按key=value&key=value格式拼接排序后的参数(不进行 URL 编码
  3. HMAC-SHA256 加密:用AppSecret作为密钥,对拼接字符串进行加密,结果转大写即为sign

python

运行

# 签名生成示例代码(直接复用) import hashlib import hmac def generate_sign(params, app_secret): # 步骤1:按参数名ASCII升序排序 sorted_params = sorted(params.items(), key=lambda x: x[0]) # 步骤2:拼接字符串 sign_str = "&".join([f"{k}={v}" for k, v in sorted_params]) # 步骤3:HMAC-SHA256加密并转大写 sign = hmac.new( app_secret.encode("utf-8"), sign_str.encode("utf-8"), hashlib.sha256 ).hexdigest().upper() return sign

三、 实战调用:Python 代码实现(基础版 / 增强版通用)

以下代码为可直接运行版本,只需替换APP_KEYAPP_SECRET即可完成调用,包含「接口请求 + 数据解析 + 结果输出」全流程。

1. 完整代码(基础版item_search

python

运行

import requests import hashlib import hmac import time # ------------------- 配置区(替换为你的凭证) ------------------- APP_KEY = "你的AppKey" APP_SECRET = "你的AppSecret" API_URL = "https://api.jd.com/routerjson" # 京东API网关地址 # ------------------- 签名生成函数 ------------------- def generate_sign(params, app_secret): sorted_params = sorted(params.items(), key=lambda x: x[0]) sign_str = "&".join([f"{k}={v}" for k, v in sorted_params]) sign = hmac.new( app_secret.encode("utf-8"), sign_str.encode("utf-8"), hashlib.sha256 ).hexdigest().upper() return sign # ------------------- 接口调用函数 ------------------- def jd_item_search(keyword, page=1, page_size=30, sort_type="sales_desc"): # 1. 组装参数(公共参数+业务参数) params = { "app_key": APP_KEY, "method": "jd.union.open.goods.search", # 基础版接口名 "format": "json", "v": "3.0", "timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "keyword": keyword, "page": str(page), "page_size": str(page_size), "sort_type": sort_type } # 2. 生成签名并加入参数 params["sign"] = generate_sign(params, APP_SECRET) # 3. 发送请求 try: response = requests.get(API_URL, params=params, timeout=10) response.raise_for_status() # 抛出HTTP异常 return response.json() except Exception as e: print(f"接口调用失败:{str(e)}") return None # ------------------- 数据解析函数 ------------------- def parse_goods_data(result): """提取商品核心字段:ID、标题、价格、销量、库存""" goods_list = [] if not result: return goods_list # 解析返回结果(按京东API格式) data = result.get("jd_union_open_goods_search_response", {}) \ .get("result", {}) \ .get("data", []) for goods in data: goods_info = { "sku_id": goods.get("skuId", ""), # 商品唯一ID "title": goods.get("goodsName", ""), # 商品标题 "price": goods.get("price", 0.0), # 现价 "original_price": goods.get("originalPrice", 0.0), # 原价 "sales": goods.get("salesCount", 0), # 累计销量 "stock": goods.get("stock", 0), # 库存 "shop_name": goods.get("shopName", "") # 店铺名称 } goods_list.append(goods_info) return goods_list # ------------------- 主函数调用 ------------------- if __name__ == "__main__": # 搜索关键词:无线蓝牙耳机 主动降噪,按销量排序 result = jd_item_search( keyword="无线蓝牙耳机 主动降噪", page=1, page_size=50, sort_type="sales_desc" ) # 解析数据 goods_data = parse_goods_data(result) # 输出结果 print(f"共获取 {len(goods_data)} 条商品数据\n") for idx, goods in enumerate(goods_data[:5]): # 打印前5条 print(f"【{idx+1}】") print(f"商品ID:{goods['sku_id']}") print(f"标题:{goods['title']}") print(f"价格:{goods['price']}元(原价:{goods['original_price']}元)") print(f"销量:{goods['sales']} 库存:{goods['stock']}") print(f"店铺:{goods['shop_name']}\n")

2. 增强版item_search_pro适配修改

只需修改两处即可切换到增强版:

  1. 接口名改为method": "jd.union.open.goods.search.pro
  2. 接口版本改为v": "4.0
  3. 可选添加增强版参数(如price_fromprice_tobrand_id

四、 数据落地:清洗、存储与应用

调用接口获取数据后,需进行数据清洗→存储→业务应用,才能转化为运营价值。

1. 数据清洗(解决 3 个常见问题)

  • 去重:以sku_id为唯一标识,剔除重复商品(分页调用易出现重复)
  • 过滤无效数据:删除stock=0(无库存)、price=0(价格异常)的商品
  • 字段标准化:统一价格格式(保留 2 位小数)、截取过长标题(避免存储溢出)

python

运行

# 数据清洗示例代码 def clean_goods_data(goods_list): cleaned = [] sku_ids = set() # 用于去重 for goods in goods_list: sku = goods["sku_id"] if sku in sku_ids or goods["stock"] <= 0 or goods["price"] <= 0: continue # 价格标准化 goods["price"] = round(float(goods["price"]), 2) goods["original_price"] = round(float(goods["original_price"]), 2) # 标题截取(前50字) goods["title"] = goods["title"][:50] + "..." if len(goods["title"]) > 50 else goods["title"] sku_ids.add(sku) cleaned.append(goods) return cleaned

2. 数据存储(2 种常用方式)

存储方式适用场景操作代码示例
Excel小批量数据、选品清单导出使用pandas库:import pandas as pd; pd.DataFrame(cleaned_data).to_excel("京东商品数据.xlsx", index=False)
MySQL大批量数据、长期监控使用pymysql库,创建数据表后批量插入(参考前文item_search_pro代码中的save_to_db函数)

3. 业务应用(3 个核心场景)

  • 选品分析:筛选sales>5000price在目标区间的商品,统计热销规格
  • 竞品监控:定期调用接口,对比竞品价格、销量变化,触发调价 / 补货预警
  • 库存管理:监控爆款商品库存,当stock<100时发送邮件 / 短信提醒

五、 常见问题与排障指南(避坑必备)

问题现象原因分析解决方案
签名错误(sign invalid)1. 参数未按 ASCII 升序排序;2. AppSecret 错误;3. timestamp 格式错误1. 检查参数排序逻辑;2. 核对 AppSecret 是否与应用一致;3. 确保时间格式为yyyy-MM-dd HH:mm:ss
权限不足(403 Forbidden)未申请对应接口权限,或应用审核未通过登录开放平台,在 “权限管理” 中确认已申请item_search/item_search_pro权限
数据返回为空1. 关键词无匹配商品;2. 页码超过最大限制;3. 筛选条件过严1. 优化关键词(更宽泛);2. 检查页码是否≤50(基础版)/100(增强版);3. 放宽价格、品牌等筛选条件
调用频率超限(429 Too Many Requests)超过平台 QPS 限制(通常基础版 10QPS,增强版 20QPS)1. 调用后添加延迟(time.sleep(1));2. 申请提高 QPS;3. 缓存重复搜索结果

六、 合规与风险提示

  1. 仅使用官方开放接口:严禁爬取京东官网(jd.com)数据,仅可调用京东开放平台 / 京东联盟 API
  2. 数据使用边界:采集的数据仅用于自身运营分析,不得转售、泄露或用于商业竞争
  3. 凭证安全AppKeyAppSecret避免上传至代码仓库(如 GitHub),可通过环境变量注入

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询