item_get 是 1688 商品详情 API 系列中最常用的第三方封装接口(基于阿里官方 alibaba.product.get 接口二次开发),特点是调用简洁、参数少、返回数据结构化,适配中小开发者快速对接 1688 商品数据的需求(如采购工具、竞品监控、分销管理等场景)。一、前置准备工作
1. 获取接口调用凭证(key + secret)
item_get 是第三方封装接口(阿里官方无直接 item_get 接口),需从正规第三方数据平台申请调用权限,流程如下:选择支持 1688 接口的第三方平台(如阿里云市场、聚合数据、易源数据等),注册并完成实名认证;
搜索 “1688 商品详情 API”,购买对应套餐(免费版通常有调用次数限制,商用需选付费版);
购买后在平台后台获取
key(接口密钥) 和secret(签名密钥),部分平台还会提供专属 API 网关地址。
⚠️ 注意:务必选择正规第三方平台,避免使用无资质的接口提供商(可能存在数据泄露、接口突然失效风险)。
2. 确认接口支持的返回字段
item_get 接口可返回的核心字段(不同第三方平台字段略有差异,以下为通用字段):基础信息:商品 ID、标题、类目、主图、多图列表、批发价区间、起订量、30 天销量;
规格库存:SKU 列表、规格组合(颜色 / 尺寸)、实时库存、SKU 阶梯批发价;
详情描述:详情页 HTML、纯文本描述、详情图列表、商品参数表;
商家信息:店铺名称、店铺类型(工厂 / 贸易商)、诚信通等级。
3. 环境配置(以 Python 为例)
pip install requests # 发送 HTTP 请求pip install beautifulsoup4 # 清洗详情页 HTML 内容
二、核心参数说明(必选 + 可选)
item_get 接口参数简洁,分为必选参数(缺失则调用失败)和可选参数(按需添加),通用参数如下:| 参数名 | 类型 | 说明 | 是否必填 | 示例值 |
|---|---|---|---|---|
key | String | 第三方平台分配的接口密钥,用于身份验证 | 是 | 2024abcdef1234567890 |
secret | String | 第三方平台分配的签名密钥,部分平台需用于生成签名(部分平台免签名) | 否 | 88889999abcdef0000 |
num_iid | String | 1688 商品唯一 ID(即 product_id),从商品详情页 URL 中提取 | 是 | 698765432109(从 URL https://detail.1688.com/offer/698765432109.html 提取) |
fields | String | 需返回的字段列表,多个字段用逗号分隔,默认返回全部字段(按需筛选可提升响应速度) | 否 | title,price,sales,sku_list,desc_text |
sales_data | Int | 是否返回 30 天销量数据,1 = 返回,0 = 不返回(默认 1) | 否 | 1 |
cache | String | 是否启用缓存,yes= 启用(重复请求同一商品时返回缓存数据,提升速度),no= 实时请求 | 否 | yes |
关键:num_iid(商品 ID)的提取方式:打开 1688 商品详情页,URL 格式为https://detail.1688.com/offer/XXXXXX.html,其中XXXXXX即为num_iid(纯数字字符串)。
三、完整代码示例(Python)
item_get 接口 → 获取商品详情 → 解析核心数据 → 清洗详情文本” 的全流程,兼容多数第三方平台接口格式:1. 基础版(无签名验证,部分平台适用)
import requestsfrom bs4 import BeautifulSoup# 1. 配置接口参数(替换为你的实际信息)API_URL = "https://api.xxx.com/1688/item_get" # 第三方平台的 API 网关地址KEY = "你的 key"SECRET = "你的 secret" # 若平台免签名,可删除该参数NUM_IID = "698765432109" # 目标商品 ID# 2. 构造请求参数params = {
"key": KEY,
"num_iid": NUM_IID,
"fields": "title,price_range,min_order_quantity,sales_count,main_image,image_list,sku_list,desc_html,shop_name",
"cache": "no" # 测试阶段用 no,避免缓存影响数据准确性}# 3. 发送 HTTP 请求(GET 方法为主,部分平台支持 POST)try:
response = requests.get(API_URL, params=params, timeout=15)
response.raise_for_status() # 抛出 HTTP 错误(如 404、500)
result = response.json() # 解析 JSON 响应
# 4. 验证接口调用是否成功
if result.get("code") == 200 and result.get("success"):
data = result.get("data") # 核心商品数据
print("=== 商品基础信息 ===")
print(f"商品标题:{data.get('title')}")
print(f"批发价区间:{data.get('price_range')} 元")
print(f"最小起订量:{data.get('min_order_quantity')} 件")
print(f"30 天销量:{data.get('sales_count')} 单")
print(f"主图 URL:{data.get('main_image')}")
print(f"店铺名称:{data.get('shop_name')}")
# 5. 解析 SKU 规格与阶梯价
print("\n=== SKU 信息 ===")
sku_list = data.get("sku_list", [])
for sku in sku_list:
print(f"SKU 规格:{sku.get('spec_names')}")
print(f"阶梯批发价:{sku.get('price_levels')}")
print(f"库存:{sku.get('stock')} 件\n")
# 6. 清洗详情页 HTML,提取纯文本
print("=== 商品详情(纯文本) ===")
desc_html = data.get("desc_html", "")
soup = BeautifulSoup(desc_html, "html.parser")
desc_text = soup.get_text(strip=True, separator="\n") # 去除标签和多余空格
print(desc_text[:500] + "...") # 打印前 500 字
else:
# 接口调用失败,打印错误信息
print(f"调用失败:{result.get('msg')}(错误码:{result.get('code')})")except requests.exceptions.RequestException as e:
print(f"网络错误:{str(e)}")except Exception as e:
print(f"解析错误:{str(e)}")2. 进阶版(含签名验证,部分平台必填)
按 ASCII 顺序排序所有请求参数(含
key、num_iid等);拼接参数名和参数值(如
key2024abcdefnum_iid698765432109);在拼接字符串首尾添加
secret,用 MD5 或 HMAC-SHA1 加密,得到签名sign。
import requestsimport hashlibimport sortedcontainers # 用于按 ASCII 排序参数(需提前安装:pip install sortedcontainers)# 1. 配置参数(含签名所需的 secret)API_URL = "https://api.xxx.com/1688/item_get"KEY = "你的 key"SECRET = "你的 secret"NUM_IID = "698765432109"# 2. 构造参数并排序params = {
"key": KEY,
"num_iid": NUM_IID,
"fields": "title,price_range,sku_list",
"cache": "no"}# 按参数名 ASCII 升序排序(关键步骤)sorted_params = sortedcontainers.SortedDict(params)# 3. 生成签名(以 MD5 加密为例,不同平台规则可能不同,需按平台文档调整)sign_str = SECRET # 签名串开头添加 secretfor k, v in sorted_params.items():
sign_str += f"{k}{v}" # 拼接参数名和值sign_str += SECRET # 签名串结尾添加 secretsign = hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper() # MD5 加密并转大写params["sign"] = sign # 将签名添加到请求参数中# 4. 发送请求(后续解析逻辑与基础版一致)try:
response = requests.get(API_URL, params=params, timeout=15)
result = response.json()
if result.get("code") == 200:
print("调用成功,商品标题:", result["data"]["title"])
else:
print(f"失败:{result['msg']}")except Exception as e:
print(f"错误:{str(e)}")四、数据解析关键要点
价格字段处理:
price_range是批发价区间(如1.20-0.80),需结合 SKU 的price_levels解析阶梯价(如 10 件 1.2 元、100 件 0.8 元),避免直接取单一价格;HTML 清洗:
desc_html含 1688 自定义标签(如alibaba-detail),用BeautifulSoup提取纯文本或详情图列表,示例:python运行# 提取详情图列表desc_html = data.get("desc_html")soup = BeautifulSoup(desc_html, "html.parser")desc_images = [img["src"] for img in soup.find_all("img") if "src" in img.attrs]print("详情图列表:", desc_images)SKU 关联:通过
spec_names(如25*35cm,红色)关联规格与 SKU,price_levels是阶梯价列表(如[{"quantity":10,"price":1.20}, {"quantity":100,"price":0.80}])。
五、常见错误排查(避坑指南)
1. 错误码 400(参数错误)
原因:
num_iid缺失或无效(如商品 ID 拼写错误、含特殊字符);排查:重新从 1688 商品 URL 提取
num_iid,确保为纯数字字符串(如698765432109),且商品未下架。
2. 错误码 401(未授权 / 签名错误)
原因:
key/secret错误、签名生成规则与平台不一致;排查:核对
key/secret是否正确(注意大小写),按平台文档重新生成签名(如是否需要排序、加密算法是否为 HMAC-SHA256 而非 MD5)。
3. 错误码 429(调用频率超限)
原因:免费版套餐调用次数用尽,或短时间内高频请求;
排查:查看第三方平台后台的剩余调用次数,批量调用时添加随机延迟(如
time.sleep(random.uniform(1,3)))。
4. 错误码 500(服务器错误)
原因:第三方平台接口故障,或商品数据异常;
排查:换一个已知正常的商品 ID 测试,若仍失败,联系第三方平台客服反馈。
5. 返回数据为空 / 缺失字段
原因:
fields参数筛选了该字段,或商品无对应数据(如无 SKU 的单规格商品);排查:删除
fields参数(默认返回全部字段),或确认商品是否为多规格、是否有销量数据。
六、商用注意事项
合规使用数据:获取的商品数据仅用于自身经营(如采购、分销),禁止转售、批量爬取他人商品数据用于恶意竞争,需遵守 1688 平台规则和《网络安全法》;
缓存优化:重复请求同一商品时启用
cache=yes,减少调用次数和延迟,降低成本;接口稳定性:商用场景建议选择付费版套餐,避免免费版接口突然限流或停用;同时添加重试机制(如接口失败后间隔 3 秒重试,最多 3 次)。
总结
item_get 接口获取 1688 商品详情的核心流程是:申请接口凭证 → 配置参数 → 发送请求 → 解析数据。关键在于正确提取 num_iid、按平台规则生成签名(若需)、合理清洗数据。