利用京东商品详情 ID(即 SKU ID)获取商品详细信息

利用京东商品详情 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.skuAttrSKU 属性(颜色 / 尺寸等)[{"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"skuMap\s*=\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 规格、店铺信息等核心数据,结合定时任务可实现价格监控、库存预警等功能。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容