利用京東商品詳情 ID(即 SKU ID)獲取商品詳細信息,可通過京東開放平臺官方 API 或非官方接口(逆向解析)實現。以下是兩種方式的示例展示,包含代碼實現與數據解析:
一、核心概念:京東商品 ID(SKU ID)
京東商品詳情頁 URL 格式為:https://item.jd.com/[SKU_ID].html
例如:https://item.jd.com/100032608854.html 中,100032608854 即為 SKU ID。
二、方式一:京東開放平臺官方 API(推薦,合規穩定)
1. 準備工作
注冊京東開放平臺開發者賬號:https://open.jd.com/
創建應用,獲取 app_key 和 app_secret
2. 接口調用示例(Python)
import requests import time import hashlib import json class JDProductAPI: def __init__(self, app_key, app_secret): self.app_key = app_key self.app_secret = app_secret self.url = "https://api.jd.com/routerjson" # 官方API網關 def _sign(self, params): """生成簽名(京東API簽名規則)""" sorted_params = sorted(params.items(), key=lambda x: x[0]) sign_str = self.app_secret for k, v in sorted_params: sign_str += f"{k}{v}" sign_str += self.app_secret return hashlib.md5(sign_str.encode()).hexdigest().upper() def get_product_detail(self, sku_id): """獲取商品詳情""" params = { "method": "biz.product.detail.get", # 商品詳情接口 "app_key": self.app_key, "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), "format": "json", "v": "1.0", "360buy_param_json": json.dumps({"skuId": sku_id}) # 商品ID參數 } params["sign"] = self._sign(params) response = requests.get(self.url, params=params) return response.json() # 使用示例 if __name__ == "__main__": # 替換為你的app_key和app_secret # 封裝好API供應商demo url=o0b.cn/ibrad app_key = "你的app_key" app_secret = "你的app_secret" sku_id = "100032608854" # 商品SKU ID jd_api = JDProductAPI(app_key, app_secret) result = jd_api.get_product_detail(sku_id) # 解析核心數據 if result.get("success"): product = result["result"]["data"]["product"] print(f"商品名稱:{product['name']}") print(f"當前價格:¥{product['price']['jdPrice']['price']}") print(f"原價:¥{product['price']['marketPrice']}") print(f"店鋪名稱:{product['shopInfo']['shopName']}") print(f"商品標簽:{[tag['name'] for tag in product.get('tags', [])]}") print(f"庫存狀態:{product['stock']['stockStateName']}") else: print(f"獲取失敗:{result.get('errorMessage')}")
3. 官方 API 返回核心字段
字段路徑 | 說明 | 示例值 |
---|---|---|
product.name | 商品名稱 | "Apple iPhone 14 128GB" |
product.price.jdPrice.price | 當前售價 | 5999.00 |
product.price.marketPrice | 市場價(原價) | 6999.00 |
product.shopInfo.shopName | 店鋪名稱 | "Apple 京東自營旗艦店" |
product.stock.stockStateName | 庫存狀態 | "有貨" |
product.skuAttrs.skuAttr | SKU 屬性(顏色 / 尺寸等) | [{"attrName":"顏色", "attrValues":["黑色","白色"]}] |
三、方式二:非官方接口(逆向解析,適合快速驗證)
通過分析京東商品頁網絡請求,獲取非官方接口數據。
1. 商品詳情接口(非官方)
import requests import json def get_jd_product_detail(sku_id): """逆向獲取京東商品詳情(非官方接口)""" # 商品基本信息接口 # 封裝好API供應商demo url=o0b.cn/ibrad url = f"https://item-soa.jd.com/getItemDetail?skuId={sku_id}" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Referer": f"https://item.jd.com/{sku_id}.html" } response = requests.get(url, headers=headers) data = response.json() if data.get("code") == 0: result = data["data"] return { "name": result["itemName"], "price": result["price"]["p"], # 當前價 "original_price": result["price"]["m"], # 原價 "shop_name": result["shopInfo"]["name"], "stock": result["stock"]["stockNum"], # 庫存數量 "brand": result["brand"]["name"], # 品牌 "main_image": result["itemImg"]["slaveUrl"][0] # 主圖 } else: return {"error": "獲取失敗"} # 使用示例 if __name__ == "__main__": sku_id = "100032608854" detail = get_jd_product_detail(sku_id) if "error" not in detail: print(f"商品名稱:{detail['name']}") print(f"當前價格:¥{detail['price']}") print(f"原價:¥{detail['original_price']}") print(f"店鋪:{detail['shop_name']}") print(f"庫存:{detail['stock']}件") print(f"品牌:{detail['brand']}") print(f"主圖:{detail['main_image']}")
四、擴展應用:SKU 多規格信息獲取
通過商品 ID 獲取所有 SKU(如不同顏色 / 尺寸的價格、庫存):
def get_jd_skus(sku_id): """獲取商品所有SKU信息""" url = f"https://cd.jd.com/skuDetail?skuId={sku_id}" headers = {"User-Agent": "Mozilla/5.0"} response = requests.get(url, headers=headers) # 解析SKU數據(非官方接口返回格式可能為JavaScript變量) import re sku_data = re.findall(r"skuMaps*=s*({.*?});", response.text) if sku_data: sku_map = json.loads(sku_data[0]) skus = [] for sku in sku_map.values(): skus.append({ "sku_id": sku["skuId"], "attr": sku["skuAttr"], # 規格描述(如"顏色:黑色;尺寸:128GB") "price": sku["price"], "stock": sku["stockNum"] }) return skus return [] # 使用示例 skus = get_jd_skus("100032608854") print("nSKU列表:") for sku in skus[:3]: # 打印前3個SKU print(f"規格:{sku['attr']},價格:¥{sku['price']},庫存:{sku['stock']}件")
總結
官方 API:適合企業級應用,數據穩定、合規,需申請權限。
非官方接口:適合快速驗證或個人學習,需處理反爬和接口變更風險。
通過商品 ID 可獲取價格、庫存、SKU 規格、店鋪信息等核心數據,結合定時任務可實現價格監控、庫存預警等功能。
審核編輯 黃宇
-
API
+關注
關注
2文章
1599瀏覽量
63961 -
URL
+關注
關注
0文章
141瀏覽量
15850
發布評論請先 登錄
《仿盒馬》app開發技術分享-- 首頁商品流(7)
《仿盒馬》app開發技術分享-- 自定義標題欄&商品詳情初探(9)
《仿盒馬》app開發技術分享-- 商品詳情頁(10)
《仿盒馬》app開發技術分享-- 商品規格彈窗(11)
hanlp分詞工具應用案例:商品圖自動推薦功能的應用
RFID系統組成及RFID商品防偽技術的應用

實例分析京東詳情頁前端開發

評論