京东批量获取商品SKU操作指南

一、技术准备

  1. 注册京东开放平台账号

    • 访问京东开放平台完成注册,需提供企业资质(营业执照等)。
    • 创建应用:登录后进入「开发者中心」→「应用管理」→「创建应用」,填写应用名称、描述等信息,提交审核通过后获取AppKeyAppSecret
  2. API权限申请

    • 在应用管理页面,为应用添加「商品查询」相关权限(如jd.item.sku.info.getjd.union.open.goods.query等)。
    • 提交权限申请后,等待京东审核(通常1-3个工作日)。

二、核心API接口解析

  1. SKU信息查询接口 (推荐jd.item.sku.info.get

    • 功能:通过商品ID或SKU ID列表获取SKU详情(价格、库存、规格等)。

    • 请求参数

      csharp 复制代码
      python
      params = {
          "method": "jd.item.sku.info.get",
          "app_key": "YOUR_APP_KEY",
          "item_id": "商品ID",  # 或通过skuIds批量查询
          "skuIds": "SKU_ID_1,SKU_ID_2",  # 多个SKU用逗号分隔
          "timestamp": int(time.time() * 1000),  # 毫秒级时间戳
          "v": "2.0",
          "sign_method": "md5"  # 签名算法
      }
    • 响应字段

      • skuInfo:包含skuIdprice(价格)、stockQuantity(库存)、specifications(规格)等。
  2. 商品列表批量查询接口 (推荐jd.union.open.goods.query

    • 功能:按条件筛选商品(类目、价格区间、销量排序等),支持分页。

    • 请求参数

      csharp 复制代码
      python
      params = {
          "method": "jd.union.open.goods.query",
          "app_key": "YOUR_APP_KEY",
          "pageIndex": 1,  # 页码
          "pageSize": 20,  # 每页数量
          "sortType": 3,  # 按销量排序(3为销量降序)
          "timestamp": int(time.time() * 1000),
          "v": "1.0",
          "sign_method": "md5"
      }
    • 响应字段

      • wareInfoVos:包含商品名称、价格、销量、主图URL等。

三、认证与签名流程

python 复制代码
python
import hashlib
import time
 
def generate_sign(params, app_secret):
    # 按字母顺序排序参数
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    # 拼接查询字符串
    query_str = ''.join([f"{k}{v}" for k, v in sorted_params])
    # 拼接AppSecret并生成MD5签名
    sign_str = query_str + app_secret
    return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
 
# 示例:生成签名
params = {
    "method": "jd.item.sku.info.get",
    "app_key": "YOUR_APP_KEY",
    "item_id": "123456",
    "timestamp": int(time.time() * 1000),
    "v": "2.0"
}
params['sign'] = generate_sign(params, 'YOUR_APP_SECRET')

四、完整代码示例(Python)

python 复制代码
python
import requests
import json
import time
 
class JDSKUFetcher:
    def __init__(self, app_key, app_secret):
        self.app_key = app_key
        self.app_secret = app_secret
        self.base_url = "https://api.jd.com/routerjson"
 
    def fetch_sku_info(self, item_id, sku_ids=None):
        """获取单个商品或多个SKU的详情"""
        params = {
            "method": "jd.item.sku.info.get",
            "app_key": self.app_key,
            "item_id": item_id,
            "timestamp": int(time.time() * 1000),
            "v": "2.0",
            "sign_method": "md5"
        }
        if sku_ids:
            params["skuIds"] = ','.join(map(str, sku_ids))
        params['sign'] = self.generate_sign(params)
        response = requests.post(self.base_url, data=params)
        return self.parse_response(response)
 
    def generate_sign(self, params):
        """生成MD5签名"""
        sorted_params = sorted(params.items(), key=lambda x: x[0])
        query_str = ''.join([f"{k}{v}" for k, v in sorted_params])
        sign_str = query_str + self.app_secret
        return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()
 
    def parse_response(self, response):
        """解析京东API响应"""
        if response.status_code != 200:
            raise Exception(f"HTTP错误: {response.status_code}")
        data = response.json()
        if data.get('error_code') != '0':
            raise Exception(f"API错误: {data.get('error_msg')}")
        return data.get('jd_item_sku_info_get_response', {}).get('skuInfo', [])
 
# 使用示例
if __name__ == "__main__":
    fetcher = JDSKUFetcher("YOUR_APP_KEY", "YOUR_APP_SECRET")
    # 获取单个商品的所有SKU
    sku_list = fetcher.fetch_sku_info(item_id="123456")
    print(json.dumps(sku_list, indent=2))
    
    # 获取多个指定SKU的详情
    # sku_details = fetcher.fetch_sku_info(sku_ids=[1001, 1002, 1003])

五、批量处理与数据存储

  1. 分布式爬取架构(使用线程池)

    python 复制代码
    python
    from concurrent.futures import ThreadPoolExecutor
     
    def batch_fetch(sku_ids):
        with ThreadPoolExecutor(max_workers=5) as executor:
            futures = [executor.submit(fetcher.fetch_sku_info, sku_id) for sku_id in sku_ids]
            results = [f.result() for f in futures]
        return results
  2. 数据存储到SQLite

    python 复制代码
    python
    import sqlite3
     
    class DataStorage:
        def __init__(self):
            self.conn = sqlite3.connect('jd_sku.db')
            self._create_table()
     
        def _create_table(self):
            cursor = self.conn.cursor()
            cursor.execute('''
                CREATE TABLE IF NOT EXISTS sku_data (
                    sku_id INTEGER PRIMARY KEY,
                    item_id TEXT,
                    price REAL,
                    stock INTEGER,
                    specs TEXT
                )
            ''')
            self.conn.commit()
     
        def save_data(self, sku_info):
            cursor = self.conn.cursor()
            for sku in sku_info:
                cursor.execute('''
                    INSERT OR REPLACE INTO sku_data 
                    VALUES (?, ?, ?, ?, ?)
                ''', (
                    sku.get('skuId'),
                    sku.get('itemId'),
                    sku.get('price'),
                    sku.get('stockQuantity'),
                    json.dumps(sku.get('specifications'))
                ))
            self.conn.commit()

六、注意事项与合规要求

  1. 调用频率限制 :京东API对未认证应用限制10次/秒,认证后提升至50次/秒,需通过time.sleep()控制请求间隔。

  2. 数据隐私保护:禁止抓取用户手机号、地址等敏感信息,仅用于合法用途(如价格监控、库存分析)。

  3. 错误重试机制

    python 复制代码
    python
    def safe_request(func):
        def wrapper(*args, **kwargs):
            for _ in range(3):
                try:
                    return func(*args, **kwargs)
                except (requests.ConnectionError, requests.Timeout):
                    time.sleep(2)
                    continue
                except Exception as e:
                    logging.error(f"请求失败: {str(e)}")
                    break
            return None
        return wrapper
  4. 遵守京东开放平台规则:定期检查API文档更新,避免使用已废弃接口。

通过本指南,您可以高效、合规地批量获取京东商品SKU信息,适用于价格监控、库存管理、竞品分析等场景。

相关推荐
RadiumAg30 分钟前
记一道有趣的面试题
前端·javascript
yangzhi_emo34 分钟前
ES6笔记2
开发语言·前端·javascript
yanlele1 小时前
我用爬虫抓取了 25 年 5 月掘金热门面试文章
前端·javascript·面试
ai小鬼头1 小时前
Ollama+OpenWeb最新版0.42+0.3.35一键安装教程,轻松搞定AI模型部署
后端·架构·github
萧曵 丶2 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
中微子2 小时前
React状态管理最佳实践
前端
老任与码2 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
烛阴2 小时前
void 0 的奥秘:解锁 JavaScript 中 undefined 的正确打开方式
前端·javascript
中微子2 小时前
JavaScript 事件与 React 合成事件完全指南:从入门到精通
前端
Hexene...2 小时前
【前端Vue】如何实现echarts图表根据父元素宽度自适应大小
前端·vue.js·echarts