本指南聚焦京東開放平臺合規接口(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 | 應用詳情頁獲取的AppKey | 1234567890 |
| method | 接口名稱,基礎版填jd.union.open.goods.search;增強版填jd.union.open.goods.search.pro | jd.union.open.goods.search |
| format | 響應格式,固定為json | json |
| v | 接口版本,基礎版用3.0;增強版用4.0 | 3.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;增強版最大 100 | 50 |
| sort_type | 否 | 排序方式:price_asc(低價)、sales_desc(銷量)、real_sales_desc(增強版實時銷量) | sales_desc |
| price_from/price_to | 否 | 價格區間篩選(增強版專屬) | 100/300 |
2. 簽名算法實操(3 步生成,以 Python 為例)
簽名是京東 API 的核心驗證環節,步驟如下:
參數排序:將所有公共參數 + 業務參數,按參數名 ASCII 碼升序排列(如app_key→format→keyword→method...)
拼接字符串:按 key=value&key=value 格式拼接排序后的參數(不進行 URL 編碼)
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_KEY、APP_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適配修改
只需修改兩處即可切換到增強版:
接口名改為 method": "jd.union.open.goods.search.pro
接口版本改為 v": "4.0
可選添加增強版參數(如price_from、price_to、brand_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>5000、price在目標區間的商品,統計熱銷規格
競品監控:定期調用接口,對比競品價格、銷量變化,觸發調價 / 補貨預警
庫存管理:監控爆款商品庫存,當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. 緩存重復搜索結果 |
六、 合規與風險提示
僅使用官方開放接口:嚴禁爬取京東官網(jd.com)數據,僅可調用京東開放平臺 / 京東聯盟 API
數據使用邊界:采集的數據僅用于自身運營分析,不得轉售、泄露或用于商業競爭
憑證安全:AppKey和AppSecret避免上傳至代碼倉庫(如 GitHub),可通過環境變量注入
審核編輯 黃宇
-
API
+關注
關注
2文章
2368瀏覽量
66752
發布評論請先 登錄
京東關鍵詞搜索接口獲取商品數據的實操指南
評論