京東關(guān)鍵詞搜索接口獲取商品數(shù)據(jù) 實(shí)操指南
本指南聚焦京東開放平臺合規(guī)接口(item_search基礎(chǔ)版 / item_search_pro增強(qiáng)版),提供從賬號準(zhǔn)備→接口調(diào)用→數(shù)據(jù)解析→落地應(yīng)用的全流程實(shí)操步驟,確保新手也能快速完成商品數(shù)據(jù)獲取,適配電商選品、競品分析、運(yùn)營監(jiān)控等核心場景。
一、 實(shí)操前置:合規(guī)準(zhǔn)備與核心憑證獲取
京東關(guān)鍵詞接口屬于官方開放接口,需完成開發(fā)者認(rèn)證與權(quán)限申請,嚴(yán)禁未經(jīng)授權(quán)的爬蟲抓取,否則會面臨 IP 封禁、法律風(fēng)險(xiǎn)。
1. 賬號與權(quán)限準(zhǔn)備(3 步完成)
| 步驟 | 操作內(nèi)容 | 詳細(xì)指引 |
|---|---|---|
| 1 | 注冊京東開放平臺開發(fā)者賬號 | 訪問 京東開放平臺官網(wǎng) → 點(diǎn)擊 “開發(fā)者注冊” → 選擇個(gè)人 / 企業(yè)身份完成實(shí)名認(rèn)證(企業(yè)需提供營業(yè)執(zhí)照,個(gè)人需提供身份證) |
| 2 | 創(chuàng)建應(yīng)用并申請接口權(quán)限 | 登錄后進(jìn)入 “應(yīng)用管理” → 點(diǎn)擊 “創(chuàng)建應(yīng)用” → 填寫應(yīng)用名稱、用途(如 “商品數(shù)據(jù)采集與選品分析”) → 提交審核 → 審核通過后,在 “權(quán)限管理” 中申請 「商品搜索接口」(基礎(chǔ)版item_search或增強(qiáng)版item_search_pro) |
| 3 | 獲取核心調(diào)用憑證 | 應(yīng)用審核通過后,在 “應(yīng)用詳情” 頁查看并保存 AppKey(應(yīng)用唯一標(biāo)識)、AppSecret(密鑰) → 這兩個(gè)參數(shù)是接口調(diào)用的核心,需妥善保管,避免泄露 |
注意:item_search_pro屬于高級接口,需單獨(dú)申請權(quán)限,審核周期比基礎(chǔ)版長 1-2 個(gè)工作日。
2. 工具準(zhǔn)備
開發(fā)環(huán)境:Python/Java/PHP(推薦 Python,代碼簡潔易上手)
依賴工具:Python 需安裝requests庫(pip install requests)、Java 需安裝HttpClient、PHP 需開啟curl擴(kuò)展
輔助工具:Postman(接口調(diào)試)、Excel/MySQL(數(shù)據(jù)存儲)
二、 核心配置:接口參數(shù)與簽名算法(必掌握)
京東 API 采用 “參數(shù) + 簽名” 驗(yàn)證機(jī)制,簽名錯(cuò)誤是調(diào)用失敗的最常見原因,需嚴(yán)格按以下步驟配置。
1. 接口參數(shù)分類(公共參數(shù) + 業(yè)務(wù)參數(shù))
(1) 公共參數(shù)(所有接口通用,必填)
| 參數(shù)名 | 取值要求 | 示例值 |
|---|---|---|
| app_key | 應(yīng)用詳情頁獲取的AppKey | 1234567890 |
| method | 接口名稱,基礎(chǔ)版填jd.union.open.goods.search;增強(qiáng)版填jd.union.open.goods.search.pro | jd.union.open.goods.search |
| format | 響應(yīng)格式,固定為json | json |
| v | 接口版本,基礎(chǔ)版用3.0;增強(qiáng)版用4.0 | 3.0 |
| timestamp | 請求時(shí)間戳,格式y(tǒng)yyy-MM-dd HH:mm:ss(需與京東服務(wù)器時(shí)間一致,誤差≤5 分鐘) | 2026-01-08 10:30:00 |
| sign | 簽名值,通過 HMAC-SHA256 算法生成(下文詳細(xì)說明) | 8F7A6B5C4D3E2F1A9087654321ABCDEF |
(2) 業(yè)務(wù)參數(shù)(關(guān)鍵詞搜索核心參數(shù))
| 參數(shù)名 | 必填 | 取值說明 | 示例值 |
|---|---|---|---|
| keyword | 是 | 搜索關(guān)鍵詞,支持多詞組合(空格分隔) | 無線藍(lán)牙耳機(jī) 主動降噪 |
| page | 否 | 頁碼,默認(rèn) 1,基礎(chǔ)版最大 50 頁;增強(qiáng)版最大 100 頁 | 1 |
| page_size | 否 | 每頁條數(shù),默認(rèn) 30,基礎(chǔ)版最大 50;增強(qiáng)版最大 100 | 50 |
| sort_type | 否 | 排序方式:price_asc(低價(jià))、sales_desc(銷量)、real_sales_desc(增強(qiáng)版實(shí)時(shí)銷量) | sales_desc |
| price_from/price_to | 否 | 價(jià)格區(qū)間篩選(增強(qiáng)版專屬) | 100/300 |
2. 簽名算法實(shí)操(3 步生成,以 Python 為例)
簽名是京東 API 的核心驗(yàn)證環(huán)節(jié),步驟如下:
參數(shù)排序:將所有公共參數(shù) + 業(yè)務(wù)參數(shù),按參數(shù)名 ASCII 碼升序排列(如app_key→format→keyword→method...)
拼接字符串:按 key=value&key=value 格式拼接排序后的參數(shù)(不進(jìn)行 URL 編碼)
HMAC-SHA256 加密:用AppSecret作為密鑰,對拼接字符串進(jìn)行加密,結(jié)果轉(zhuǎn)大寫即為sign
python
運(yùn)行
# 簽名生成示例代碼(直接復(fù)用) import hashlib import hmac def generate_sign(params, app_secret): # 步驟1:按參數(shù)名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加密并轉(zhuǎn)大寫 sign = hmac.new( app_secret.encode("utf-8"), sign_str.encode("utf-8"), hashlib.sha256 ).hexdigest().upper() return sign
三、 實(shí)戰(zhàn)調(diào)用:Python 代碼實(shí)現(xiàn)(基礎(chǔ)版 / 增強(qiáng)版通用)
以下代碼為可直接運(yùn)行版本,只需替換APP_KEY、APP_SECRET即可完成調(diào)用,包含「接口請求 + 數(shù)據(jù)解析 + 結(jié)果輸出」全流程。
1. 完整代碼(基礎(chǔ)版item_search)
python
運(yùn)行
import requests
import hashlib
import hmac
import time
# ------------------- 配置區(qū)(替換為你的憑證) -------------------
APP_KEY = "你的AppKey"
APP_SECRET = "你的AppSecret"
API_URL = "https://api.jd.com/routerjson" # 京東API網(wǎng)關(guān)地址
# ------------------- 簽名生成函數(shù) -------------------
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
# ------------------- 接口調(diào)用函數(shù) -------------------
def jd_item_search(keyword, page=1, page_size=30, sort_type="sales_desc"):
# 1. 組裝參數(shù)(公共參數(shù)+業(yè)務(wù)參數(shù))
params = {
"app_key": APP_KEY,
"method": "jd.union.open.goods.search", # 基礎(chǔ)版接口名
"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. 生成簽名并加入?yún)?shù)
params["sign"] = generate_sign(params, APP_SECRET)
# 3. 發(fā)送請求
try:
response = requests.get(API_URL, params=params, timeout=10)
response.raise_for_status() # 拋出HTTP異常
return response.json()
except Exception as e:
print(f"接口調(diào)用失?。簕str(e)}")
return None
# ------------------- 數(shù)據(jù)解析函數(shù) -------------------
def parse_goods_data(result):
"""提取商品核心字段:ID、標(biāo)題、價(jià)格、銷量、庫存"""
goods_list = []
if not result:
return goods_list
# 解析返回結(jié)果(按京東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", ""), # 商品標(biāo)題
"price": goods.get("price", 0.0), # 現(xiàn)價(jià)
"original_price": goods.get("originalPrice", 0.0), # 原價(jià)
"sales": goods.get("salesCount", 0), # 累計(jì)銷量
"stock": goods.get("stock", 0), # 庫存
"shop_name": goods.get("shopName", "") # 店鋪名稱
}
goods_list.append(goods_info)
return goods_list
# ------------------- 主函數(shù)調(diào)用 -------------------
if __name__ == "__main__":
# 搜索關(guān)鍵詞:無線藍(lán)牙耳機(jī) 主動降噪,按銷量排序
result = jd_item_search(
keyword="無線藍(lán)牙耳機(jī) 主動降噪",
page=1,
page_size=50,
sort_type="sales_desc"
)
# 解析數(shù)據(jù)
goods_data = parse_goods_data(result)
# 輸出結(jié)果
print(f"共獲取 {len(goods_data)} 條商品數(shù)據(jù)n")
for idx, goods in enumerate(goods_data[:5]): # 打印前5條
print(f"【{idx+1}】")
print(f"商品ID:{goods['sku_id']}")
print(f"標(biāo)題:{goods['title']}")
print(f"價(jià)格:{goods['price']}元(原價(jià):{goods['original_price']}元)")
print(f"銷量:{goods['sales']} 庫存:{goods['stock']}")
print(f"店鋪:{goods['shop_name']}n")
2. 增強(qiáng)版item_search_pro適配修改
只需修改兩處即可切換到增強(qiáng)版:
接口名改為 method": "jd.union.open.goods.search.pro
接口版本改為 v": "4.0
可選添加增強(qiáng)版參數(shù)(如price_from、price_to、brand_id)
四、 數(shù)據(jù)落地:清洗、存儲與應(yīng)用
調(diào)用接口獲取數(shù)據(jù)后,需進(jìn)行數(shù)據(jù)清洗→存儲→業(yè)務(wù)應(yīng)用,才能轉(zhuǎn)化為運(yùn)營價(jià)值。
1. 數(shù)據(jù)清洗(解決 3 個(gè)常見問題)
去重:以sku_id為唯一標(biāo)識,剔除重復(fù)商品(分頁調(diào)用易出現(xiàn)重復(fù))
過濾無效數(shù)據(jù):刪除stock=0(無庫存)、price=0(價(jià)格異常)的商品
字段標(biāo)準(zhǔn)化:統(tǒng)一價(jià)格格式(保留 2 位小數(shù))、截取過長標(biāo)題(避免存儲溢出)
python
運(yùn)行
# 數(shù)據(jù)清洗示例代碼
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
# 價(jià)格標(biāo)準(zhǔn)化
goods["price"] = round(float(goods["price"]), 2)
goods["original_price"] = round(float(goods["original_price"]), 2)
# 標(biāo)題截?。ㄇ?0字)
goods["title"] = goods["title"][:50] + "..." if len(goods["title"]) > 50 else goods["title"]
sku_ids.add(sku)
cleaned.append(goods)
return cleaned
2. 數(shù)據(jù)存儲(2 種常用方式)
| 存儲方式 | 適用場景 | 操作代碼示例 |
|---|---|---|
| Excel | 小批量數(shù)據(jù)、選品清單導(dǎo)出 | 使用pandas庫:import pandas as pd; pd.DataFrame(cleaned_data).to_excel("京東商品數(shù)據(jù).xlsx", index=False) |
| MySQL | 大批量數(shù)據(jù)、長期監(jiān)控 | 使用pymysql庫,創(chuàng)建數(shù)據(jù)表后批量插入(參考前文item_search_pro代碼中的save_to_db函數(shù)) |
3. 業(yè)務(wù)應(yīng)用(3 個(gè)核心場景)
選品分析:篩選sales>5000、price在目標(biāo)區(qū)間的商品,統(tǒng)計(jì)熱銷規(guī)格
競品監(jiān)控:定期調(diào)用接口,對比競品價(jià)格、銷量變化,觸發(fā)調(diào)價(jià) / 補(bǔ)貨預(yù)警
庫存管理:監(jiān)控爆款商品庫存,當(dāng)stock<100時(shí)發(fā)送郵件 / 短信提醒
五、 常見問題與排障指南(避坑必備)
| 問題現(xiàn)象 | 原因分析 | 解決方案 |
|---|---|---|
| 簽名錯(cuò)誤(sign invalid) | 1. 參數(shù)未按 ASCII 升序排序;2. AppSecret 錯(cuò)誤;3. timestamp 格式錯(cuò)誤 | 1. 檢查參數(shù)排序邏輯;2. 核對 AppSecret 是否與應(yīng)用一致;3. 確保時(shí)間格式為yyyy-MM-dd HH:mm:ss |
| 權(quán)限不足(403 Forbidden) | 未申請對應(yīng)接口權(quán)限,或應(yīng)用審核未通過 | 登錄開放平臺,在 “權(quán)限管理” 中確認(rèn)已申請item_search/item_search_pro權(quán)限 |
| 數(shù)據(jù)返回為空 | 1. 關(guān)鍵詞無匹配商品;2. 頁碼超過最大限制;3. 篩選條件過嚴(yán) | 1. 優(yōu)化關(guān)鍵詞(更寬泛);2. 檢查頁碼是否≤50(基礎(chǔ)版)/100(增強(qiáng)版);3. 放寬價(jià)格、品牌等篩選條件 |
| 調(diào)用頻率超限(429 Too Many Requests) | 超過平臺 QPS 限制(通常基礎(chǔ)版 10QPS,增強(qiáng)版 20QPS) | 1. 調(diào)用后添加延遲(time.sleep(1));2. 申請?zhí)岣?QPS;3. 緩存重復(fù)搜索結(jié)果 |
六、 合規(guī)與風(fēng)險(xiǎn)提示
僅使用官方開放接口:嚴(yán)禁爬取京東官網(wǎng)(jd.com)數(shù)據(jù),僅可調(diào)用京東開放平臺 / 京東聯(lián)盟 API
數(shù)據(jù)使用邊界:采集的數(shù)據(jù)僅用于自身運(yùn)營分析,不得轉(zhuǎn)售、泄露或用于商業(yè)競爭
憑證安全:AppKey和AppSecret避免上傳至代碼倉庫(如 GitHub),可通過環(huán)境變量注入
審核編輯 黃宇
-
API
+關(guān)注
關(guān)注
2文章
2365瀏覽量
66744
發(fā)布評論請先 登錄
關(guān)鍵詞搜索京東列表 API 技術(shù)對接指南
野莓平臺關(guān)鍵詞商品搜索API接口使用指南
京東關(guān)鍵詞的應(yīng)用
使用京東關(guān)鍵詞搜索接口獲取商品數(shù)據(jù)的實(shí)操指南
京東關(guān)鍵詞API接口獲取
京東關(guān)鍵詞搜索商品列表的Python實(shí)戰(zhàn)
京東關(guān)鍵詞 API 場景的需求梳理模板
京東關(guān)鍵詞的應(yīng)用場景
京東關(guān)鍵詞API賦能
京東關(guān)鍵詞item_search-按關(guān)鍵字搜索京東商品
京東按關(guān)鍵字搜索商品 API接口item_search Pro
利用京東搜索關(guān)鍵詞 API 接口賦能電商運(yùn)營
淺談京東關(guān)鍵詞
京東關(guān)鍵詞搜索商品列表的Python爬蟲實(shí)戰(zhàn)
搜索關(guān)鍵詞獲取商品詳情接口的設(shè)計(jì)與實(shí)現(xiàn)
京東關(guān)鍵詞搜索接口獲取商品數(shù)據(jù)的實(shí)操指南
評論