一、接口概述
京東關鍵字搜索接口允許開發者通過HTTP請求獲取平臺商品的關鍵字搜索結果,常用于商品比價、數據分析等場景。本文基于Python演示如何調用京東搜索接口,解析返回數據并實現基礎功能。
二、技術實現步驟
接口地址分析?
京東未完全公開API文檔,需通過瀏覽器開發者工具(F12)抓取搜索請求。示例接口格式:
python
Copy Code
SEARCH_URL = "https://search.jd.com/Search"
核心參數說明?
參數名??? 說明??? 示例值
keyword??? 搜索關鍵詞??? "手機"
page??? 分頁頁碼(每頁30條)??? 1
sort??? 排序方式??? "price_asc"
請求頭偽裝?
需模擬瀏覽器請求,避免被反爬攔截:
python
Copy Code
headers = {
??? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
??? "Referer": "https://www.jd.com/"
}
三、Python代碼實現
python
Copy Code
import requests
from urllib.parse import urlencode
import json
def jd_keyword_search(keyword, page=1, sort=None):
??? base_url = "https://search.jd.com/Search?"
?? ?
??? # 構造查詢參數
??? params = {
??????? "keyword": keyword,
??????? "page": page,
??????? "s": (page-1)*30 + 1? # 京東分頁計算邏輯
??? }
??? if sort:
??????? params["sort"] = sort
?? ?
??? # 發送GET請求
??? try:
??????? response = requests.get(
??????????? url=base_url + urlencode(params),
??????????? headers=headers,
??????????? timeout=10
??????? )
??????? response.raise_for_status()
??????? return parse_search_result(response.text)
??? except Exception as e:
??????? print(f"請求失敗: {str(e)}")
??????? return None
def parse_search_result(html):
??? # 京東頁面數據通常嵌入在HTML的JS變量中
??? start_str = "window.pageConfig = "
??? start = html.find(start_str) + len(start_str)
??? end = html.find("};", start) + 1
??? json_data = json.loads(html[start:end])
?? ?
??? # 提取商品信息
??? products = []
??? for item in json_data["product"]:
??????? product = {
??????????? "name": item.get("name", ""),
??????????? "price": item.get("op", "無價格"),
??????????? "shop": item.get("shop", {}).get("name", ""),
??????????? "comments": item.get("commentCount", 0)
??????? }
??????? products.append(product)
??? return products
# 示例調用
if __name__ == "__main__":
??? headers = {
??????? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)..."
??? }
??? result = jd_keyword_search("藍牙耳機", page=1, sort="price_asc")
??? print(json.dumps(result[:2], indent=2, ensure_ascii=False))
四、響應數據處理示例
json
Copy Code
[
? {
??? "name": "華為FreeBuds 4E 無線藍牙耳機",
??? "price": "599.00",
??? "shop": "華為京東自營旗艦店",
??? "comments": 200000
? },
? {
??? "name": "小米Redmi Buds 4 青春版",
??? "price": "99.00",
??? "shop": "小米京東自營旗艦店",
??? "comments": 150000
? }
]
五、注意事項
反爬機制?
高頻訪問可能觸發IP限制,建議添加time.sleep(3)間隔
使用代理IP池提升穩定性(參考requests-ip-rotator庫)
數據合法性?
禁止商用數據抓取,僅用于技術學習
遵守京東《Robots協議》(https://www.jd.com/robots.txt)
替代方案?
如需穩定服務,建議申請京東聯盟官方API(需企業資質):
python
Copy Code
# 官方API示例(需授權)
OFFICIAL_API = "https://api.jd.com/routerjson"
六、總結
本文通過逆向分析實現了京東搜索接口調用,包含參數構造、反爬策略和數據解析。實際開發中建議優先使用官方接口,非官方方案需嚴格遵守平臺規則。關注響應結構變化,及時更新解析邏輯。
擴展建議?:結合多平臺接口實現比價系統,或接入自然語言處理(NLP)優化搜索關鍵詞推薦。