你想要獲取京東關(guān)鍵詞相關(guān)的 API 接口,以此替代傳統(tǒng)爬蟲(chóng),更合規(guī)、穩(wěn)定地獲取商品列表等信息,我會(huì)先講解官方合規(guī)的 API 獲取與使用方式(推薦),再說(shuō)明非官方接口的情況(僅供學(xué)習(xí)),并給出具體的調(diào)用示例。
一、核心前提說(shuō)明
京東沒(méi)有向普通個(gè)人用戶(hù)開(kāi)放免費(fèi)的關(guān)鍵詞搜索 API,所有合法可用的接口均需通過(guò)「京東開(kāi)放平臺(tái)」申請(qǐng),且多數(shù)接口要求企業(yè)資質(zhì),同時(shí)有調(diào)用頻率限制和費(fèi)用規(guī)則;非官方的第三方接口存在合規(guī)性、穩(wěn)定性風(fēng)險(xiǎn),僅建議用于技術(shù)學(xué)習(xí)。
二、京東開(kāi)放平臺(tái)(官方合規(guī) API)
這是獲取京東關(guān)鍵詞相關(guān)數(shù)據(jù)的唯一合法途徑,適合商用或合規(guī)的開(kāi)發(fā)場(chǎng)景。
1. 京東開(kāi)放平臺(tái)入口
官網(wǎng)地址:https://open.jd.com/home/home#/index
2. 官方 API 申請(qǐng)與使用流程(分步詳解)
步驟 1:注冊(cè)開(kāi)發(fā)者賬號(hào)
進(jìn)入開(kāi)放平臺(tái)后,點(diǎn)擊「注冊(cè)」→ 選擇「開(kāi)發(fā)者注冊(cè)」;
「?jìng)€(gè)人開(kāi)發(fā)者」:僅能申請(qǐng)部分測(cè)試接口,商用功能(如商品搜索)受限;
「企業(yè)開(kāi)發(fā)者」:需提供營(yíng)業(yè)執(zhí)照、法人信息等資質(zhì),審核通過(guò)后可申請(qǐng)商用接口(推薦合規(guī)場(chǎng)景使用)。
步驟 2:創(chuàng)建應(yīng)用,獲取核心憑證
賬號(hào)登錄后,進(jìn)入「應(yīng)用管理」→「創(chuàng)建應(yīng)用」,填寫(xiě)應(yīng)用名稱(chēng)、用途、回調(diào)地址等信息;
應(yīng)用審核通過(guò)后,可在「應(yīng)用詳情」頁(yè)獲取:
AppKey:應(yīng)用唯一標(biāo)識(shí)(調(diào)用 API 時(shí)必填);
AppSecret:應(yīng)用密鑰(用于生成 API 簽名,需嚴(yán)格保密)。
步驟 3:對(duì)接商品搜索相關(guān) API
京東開(kāi)放平臺(tái)中,與「關(guān)鍵詞搜索商品」匹配的核心接口是:
接口名稱(chēng):jingdong.union.open.goods.promotion.query(京東聯(lián)盟商品搜索接口);
核心功能:根據(jù)關(guān)鍵詞、分類(lèi)、價(jià)格區(qū)間等條件查詢(xún)商品信息(含標(biāo)題、價(jià)格、傭金、鏈接等);
權(quán)限要求:需先入駐「京東聯(lián)盟」(https://union.jd.com/),再在開(kāi)放平臺(tái)綁定聯(lián)盟賬號(hào)。
步驟 4:Python 調(diào)用官方 API 示例(完整可運(yùn)行)
官方 API 調(diào)用的核心是簽名生成(京東采用 MD5 簽名防篡改),以下是簡(jiǎn)化示例:
python
運(yùn)行
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網(wǎng)關(guān)固定地址
def _generate_sign(self, params):
"""生成API簽名(京東API必填,規(guī)則必須嚴(yán)格遵循)"""
# 1. 按參數(shù)名ASCII升序排序
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 2. 拼接簽名字符串(AppSecret + 參數(shù)名值對(duì) + AppSecret)
sign_str = self.app_secret
for k, v in sorted_params:
if v: # 跳過(guò)空值參數(shù)
sign_str += f"{k}{v}"
sign_str += self.app_secret
# 3. MD5加密并轉(zhuǎn)大寫(xiě)
sign = hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()
return sign
def search_goods(self, keyword, page=1, page_size=20):
"""
調(diào)用京東聯(lián)盟商品搜索API
:param keyword: 搜索關(guān)鍵詞
:param page: 頁(yè)碼(從1開(kāi)始)
:param page_size: 每頁(yè)商品數(shù)(最大20)
:return: 商品列表字典,失敗返回None
"""
# 1. 構(gòu)造基礎(chǔ)參數(shù)(接口要求的固定參數(shù))
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"), # 北京時(shí)間戳
"page_index": page, # 頁(yè)碼
"page_size": page_size, # 每頁(yè)條數(shù)
"keyword": keyword # 搜索關(guān)鍵詞
}
# 2. 生成簽名并添加到參數(shù)中
params["sign"] = self._generate_sign(params)
# 3. 發(fā)送請(qǐng)求
try:
response = requests.get(self.base_url, params=params, timeout=10)
result = response.json()
# 校驗(yàn)調(diào)用結(jié)果
if result.get("code") == 0:
return result.get("data", {}) # 返回商品數(shù)據(jù)
else:
print(f"API調(diào)用失敗:{result.get('msg')}(錯(cuò)誤碼:{result.get('code')})")
return None
except Exception as e:
print(f"請(qǐng)求異常:{str(e)}")
return None
# 調(diào)用示例
if __name__ == "__main__":
# 替換為你從開(kāi)放平臺(tái)獲取的真實(shí)憑證
APP_KEY = "你的AppKey"
APP_SECRET = "你的AppSecret"
# 初始化API對(duì)象
jd_api = JdOfficialAPI(APP_KEY, APP_SECRET)
# 調(diào)用關(guān)鍵詞搜索接口
goods_data = jd_api.search_goods(keyword="Python編程", page=1, page_size=20)
if goods_data:
print("獲取到的商品數(shù)據(jù):")
print(json.dumps(goods_data, ensure_ascii=False, indent=2))
步驟 5:官方 API 關(guān)鍵注意事項(xiàng)
權(quán)限申請(qǐng):商品搜索接口屬于「京東聯(lián)盟」權(quán)限,需先入駐京東聯(lián)盟并綁定開(kāi)放平臺(tái)賬號(hào);
調(diào)用限制:官方 API 有 QPS(每秒調(diào)用次數(shù))限制(通常 10 次 / 秒),超出會(huì)被限流;
費(fèi)用規(guī)則:接口本身免費(fèi),但商品推廣傭金需按京東聯(lián)盟規(guī)則分成,部分高級(jí)接口按調(diào)用量收費(fèi);
簽名規(guī)則:簽名是調(diào)用成功的核心,參數(shù)必須 ASCII 升序排序、MD5 加密后轉(zhuǎn)大寫(xiě),否則會(huì)直接調(diào)用失敗。
三、非官方 API 接口(僅供學(xué)習(xí))
非官方接口是第三方開(kāi)發(fā)者基于爬蟲(chóng)封裝的 API,無(wú)需企業(yè)資質(zhì),但風(fēng)險(xiǎn)極高,僅適合個(gè)人技術(shù)學(xué)習(xí)。
1. 核心風(fēng)險(xiǎn)說(shuō)明
合規(guī)性:未經(jīng)京東授權(quán),使用此類(lèi)接口違反京東用戶(hù)協(xié)議,商用可能被追責(zé);
穩(wěn)定性:接口隨時(shí)可能失效(京東反爬升級(jí) / 第三方服務(wù)器關(guān)停);
安全性:可能泄露你的請(qǐng)求數(shù)據(jù),或被植入惡意代碼。
2. 非官方 API 調(diào)用示例(僅學(xué)習(xí))
python
運(yùn)行
import requests
import json
def get_jd_goods_unofficial(keyword, page=1):
"""
非官方京東商品搜索API調(diào)用(示例,接口可能已失效)
"""
# 替換為開(kāi)源/口碑較好的非官方API地址
url = "https://api.example.com/jd/search"
params = {
"keyword": keyword,
"page": page,
"page_size": 20,
"token": "test_token" # 部分非官方API需臨時(shí)token
}
try:
response = requests.get(url, params=params, timeout=10)
if response.status_code == 200:
return response.json()
else:
print(f"調(diào)用失敗,狀態(tài)碼:{response.status_code}")
return None
except Exception as e:
print(f"請(qǐng)求異常:{str(e)}")
return None
# 學(xué)習(xí)用調(diào)用示例
if __name__ == "__main__":
data = get_jd_goods_unofficial("Python編程", page=1)
if data:
print(json.dumps(data, ensure_ascii=False, indent=2))
3. 學(xué)習(xí)用注意事項(xiàng)
切勿將非官方 API 用于商業(yè)項(xiàng)目;
優(yōu)先選擇 GitHub 開(kāi)源的非官方 API 項(xiàng)目(可自查代碼安全性),避免未知來(lái)源的接口;
調(diào)用頻率控制在「幾分鐘 1 次」,避免給第三方服務(wù)器造成壓力。
審核編輯 黃宇
-
API
+關(guān)注
關(guān)注
2文章
2280瀏覽量
66529 -
京東
+關(guān)注
關(guān)注
2文章
1093瀏覽量
49944
發(fā)布評(píng)論請(qǐng)先 登錄
京東關(guān)鍵詞的應(yīng)用
平衡接入京東關(guān)鍵詞API利弊的核心策略
接入京東關(guān)鍵詞API的核心利弊分析
京東關(guān)鍵詞API帶來(lái)的收益
使用京東關(guān)鍵詞搜索接口獲取商品數(shù)據(jù)的實(shí)操指南
京東關(guān)鍵詞 API 場(chǎng)景的需求梳理模板
京東關(guān)鍵詞的應(yīng)用場(chǎng)景
京東關(guān)鍵詞搜索接口獲取商品數(shù)據(jù)的實(shí)操指南
京東關(guān)鍵詞API賦能
京東關(guān)鍵詞item_search-按關(guān)鍵字搜索京東商品
利用京東搜索關(guān)鍵詞 API 接口賦能電商運(yùn)營(yíng)
淺談京東關(guān)鍵詞
京東關(guān)鍵詞搜索商品列表的Python爬蟲(chóng)實(shí)戰(zhàn)
愛(ài)回收平臺(tái)根據(jù)關(guān)鍵詞獲取品牌ID的API接口詳解
搜索關(guān)鍵詞獲取商品詳情接口的設(shè)計(jì)與實(shí)現(xiàn)
京東關(guān)鍵詞API接口獲取
評(píng)論