1688搜索商品列表API详解:关键词、价格区间与分页参数配置(附Python源码)

简介: 本文详解1688搜索商品列表API(alibaba.offer.search):支持关键词、类目ID、价格区间(单位为分!)、分页与排序参数配置,附可直接运行的Python封装代码,含MD5签名、自动翻页、避坑提示及生产级调用建议。(239字)

🔍 1688搜索商品列表API详解:关键词、价格区间与分页参数配置(附Python源码)

1688搜索商品列表API(alibaba.offer.search)是B2B选品、比价、铺货系统的入口接口。它的核心价值是让你用关键词+类目+价格筛选批量获取商品快照,再结合商品详情API完成全量同步。下面直接给你可落地的Python封装和参数解析。

一、 接口基本信息

项目 说明

接口名 alibaba.offer.search(也有文档称cn.alibaba.open.search.offer)

协议 HTTPS GET/POST

网关 https://gw.open.1688.com/openapi/param2/2/alibaba.offer.search/2.0

鉴权 AppKey + AppSecret(签名)+ AccessToken(买家身份可选,公开搜索可不传)

用途 关键词搜索、按类目过滤、价格区间筛选、分页遍历

⚠️ 避坑:搜索接口返回的是offer(供应信息)摘要,不含完整SKU。拿到offerId后需调alibaba.item.get获取详情。

二、 Python封装:搜索+分页遍历

ali1688_search.py

import hashlib
import time
import requests
import urllib.parse
from typing import List, Dict, Optional

封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex 注册链接

class Ali1688SearchClient:
"""1688 商品搜索API客户端"""

def __init__(self, app_key: str, app_secret: str, access_token: str = None):
    self.app_key = app_key
    self.app_secret = app_secret
    self.access_token = access_token  # 公开搜索可不传,登录用户传session key
    self.gateway = "https://gw.open.1688.com/openapi/param2/2/alibaba.offer.search/2.0"

# ────────────────────────────────────────────
# 1688 标准 MD5 签名
# ────────────────────────────────────────────
def _sign(self, params: Dict) -> str:
    filtered = sorted((k, v) for k, v in params.items() if v is not None)
    qs = ''.join(f"{k}{v}" for k, v in filtered)
    raw = f"{self.app_secret}{qs}{self.app_secret}"
    return hashlib.md5(raw.encode('utf-8')).hexdigest().upper()

def _call(self, biz_params: Dict) -> Dict:
    """发起请求"""
    api_params = {
        "method": "alibaba.offer.search",
        "app_key": self.app_key,
        "timestamp": str(int(time.time() * 1000)),
        "format": "json",
        "v": "2.0",
        "sign_method": "md5",
    }
    if self.access_token:
        api_params["session"] = self.access_token

    # 业务参数做URL编码放入 param2
    api_params["param2"] = urllib.parse.quote_plus(
        str(biz_params).replace("'", '"')
    )
    api_params["sign"] = self._sign(api_params)

    resp = requests.get(self.gateway, params=api_params, timeout=15)
    resp.raise_for_status()
    data = resp.json()

    if "error_response" in data:
        err = data["error_response"]
        raise Exception(f"1688 Search Error [{err.get('code')}]: {err.get('msg')}")
    return data.get("alibaba_offer_search_response", {})

# ────────────────────────────────────────────
# 核心:搜索商品
# ────────────────────────────────────────────
def search_offers(self,
                  keyword: str,
                  price_start: Optional[float] = None,
                  price_end: Optional[float] = None,
                  category_id: Optional[int] = None,
                  page_no: int = 1,
                  page_size: int = 40) -> Dict:
    """
    Args:
        keyword:      搜索关键词,如 "纯棉T恤 男"
        price_start:  最低批发价(元)
        price_end:    最高批发价(元)
        category_id:  1688类目ID(可在后台查,或先调 offer.getCategory)
        page_no:      页码,从1开始
        page_size:    每页条数,最大50(推荐40)
    Returns:
        {offers: [...], totalResult: int, pageNo: int, pageSize: int}
    """
    biz = {
        "keywords": keyword,
        "pageNo": page_no,
        "pageSize": min(page_size, 50),   # 1688上限50
        "sortType": "booked",             # booked=成交量 desc, price_asc, price_desc, new
    }
    if price_start is not None:
        biz["beginPrice"] = str(int(price_start * 100))   # ⚠️ 单位是分!
    if price_end is not None:
        biz["endPrice"] = str(int(price_end * 100))
    if category_id:
        biz["categoryId"] = category_id

    return self._call(biz)

# ────────────────────────────────────────────
# 自动翻页遍历(生成器,避免内存爆炸)
# ────────────────────────────────────────────
def iter_all(self, keyword: str, max_pages: int = 5, **kwargs):
    """
    逐页yield每条offer,max_pages控制最大翻页数防死循环
    """
    for p in range(1, max_pages + 1):
        result = self.search_offers(keyword, page_no=p, **kwargs)
        offers = result.get("offers", []) or []
        total = result.get("totalResult", 0)

        if not offers:
            break

        for offer in offers:
            yield offer

        if p * kwargs.get("page_size", 40) >= total:
            break
        time.sleep(0.3)  # 友好限速

============================================================

使用示例

============================================================

if name == "main":
client = Ali1688SearchClient(
app_key="YOUR_APP_KEY",
app_secret="YOUR_APP_SECRET",
access_token=None # 公开搜索可不传
)

try:
    # ① 单次搜索
    result = client.search_offers(
        keyword="不锈钢保温杯 定制",
        price_start=15.0,     # ≥15元
        price_end=50.0,       # ≤50元
        page_no=1,
        page_size=20
    )

    offers = result.get("offers", [])
    total = result.get("totalResult", 0)
    print(f"✅ 共找到 {total} 个商品,当前页 {len(offers)} 条")

    for offer in offers[:3]:   # 预览前3条
        print(f"  • {offer.get('subject')}  "
              f"批发价:¥{offer.get('priceRange')}  "
              f"offerId:{offer.get('offerId')}")

    # ② 翻页遍历(取前2页)
    print("\n── 翻页遍历示例 ──")
    count = 0
    for offer in client.iter_all(
        keyword="不锈钢保温杯 定制",
        price_start=15.0,
        price_end=50.0,
        page_size=20,
        max_pages=2
    ):
        count += 1
        if count <= 3:
            print(f"  offerId:{offer.get('offerId')} {offer.get('subject')}")

except Exception as e:
    print(f"❌ 搜索失败: {e}")

三、 关键参数详解与避坑

  1. 价格区间单位 → 分(Cent)

这是最多人踩的坑!

✅ 正确:15~50元 → 传1500 和 5000

biz["beginPrice"] = "1500"
biz["endPrice"] = "5000"

❌ 错误:直接传 15.0 / 50.0 → 接口忽略或查无结果

  1. 分页限制

参数 说明 建议值

pageNo 从1开始 递增

pageSize 最大50,超量返回报错 20~40(平衡速度与完整性)

totalResult 返回值中带,用于判断终止 —

  1. 排序 sortType
    值 含义

booked 成交量↓(推荐选品用)

price_asc / price_desc 价格排序

new 上新时间↓

  1. 返回摘要字段(常用)
    字段 说明 下一步

offerId 供应ID 传 alibaba.item.get(offerId) 取详情

subject 商品标题 —

priceRange 起批价文本 仅展示,精确价格看详情

imageList[0] 主图URL —

minOrderQuantity 最小起订量(MOQ) ERP采购校验

supplierName 供应商店铺名 —

四、 生产级建议

  1. 关键词编码:中文关键词直接传UTF-8,requests会自动URL编码,无需手动处理。
  2. 类目约束:先通过alibaba.category.get拿到叶子类目ID再搜,可显著减少噪音(尤其服装/电子类)。
  3. 限流保护:搜索接口QPS通常≤10,建议sleep(0.2)或使用令牌桶控制。
  4. 增量更新:结合gmtModified筛选(部分搜索接口支持modifiedStartTime/End)做每日增量同步,不必全量翻页。

五、 完整对接链路(面试版)

关键词/类目


搜索API(alibaba.offer.search) ──▶ offerId列表
│ │
│ 详情API(alibaba.item.get)
│ ▼
│ SKU/批发价/库存 ──▶ ERP商品主数据


按totalResult翻页 ──▶ 去重(offerId已存在跳过) ──▶ 写ES/MySQL

需要我补充类目树获取API封装或商品详情API联动示例吗?可以直接说 👍

相关文章
|
18天前
|
人工智能 缓存 自然语言处理
阿里云AI通用型节省计划A类、B类、C类主要包含哪些模型?扣费规则与不同类型折扣信息参考
阿里云AI通用型节省计划是面向大模型按量付费场景的折扣方案,用户承诺3/6/12/24个月等月消费额,即可享阶梯式折扣。模型分为三类:A类涵盖千问全系列(不含qwen3.6-max-preview)、开源模型及向量/排序/工具调用,最高可享6.8折;B类包含图像生成、语音合成、视频生成等多模态服务,最高5.3折;C类为qwen3.6-max-preview及DeepSeek、Kimi等三方直供模型,不支持抵扣。付费方式分全预付和零预付,承诺金额越高、周期越长折扣越大。此外新用户还可领取全模型通用抵扣券(20/100/500元档)及AI加速季满减优惠券,进一步降低使用成本。
|
18天前
|
缓存 Prometheus 监控
💰 1688开放平台API收费标准与资源包购买攻略(2026最新版)
1688开放平台API采用「免费额度+资源包+按量付费」三层计费模型:基础接口(商品/订单/物流)免费但限QPS;高频或实时库存、分销等需购年费资源包;超量部分按次计费(约0.001元/次)。合理配置可零成本支撑中小B2B系统。
|
18天前
|
API
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态。
193 22
|
18天前
|
机器学习/深度学习 数据采集 人工智能
田间杂草检测数据集分享(适用于YOLO系列深度学习分类检测任务)
本数据集含4000张真实农田图像(小麦/玉米/水稻田),YOLO格式标注杂草目标,覆盖多天气、光照与视角,适用于YOLO系列等目标检测模型训练,助力智能除草与精准农业研究。(239字)
324 16
|
18天前
|
人工智能 机器人 Shell
专访 Bub 作者们:如何开发一个好记性又懂人的 Agent
这期播客主要聊了 Bub 是什么、它和普通聊天机器人/Agent 框架有什么不同,以及它背后的 Tape 记忆机制和插件化设计。简单来说,Bub 可以理解成一个以 channel 为中心的 AI Agent 框架。它不是只在命令行里写代码,也不只是一个群聊机器人,而是希望把不同 IM、命令行、工具、记忆和运行上下文连接起来,让用户可以根据自己的场景做一个定制版 Agent。
207 9
|
1月前
|
SQL 人工智能 数据可视化
数据血缘是什么?怎么建设数据血缘?
本文直击AI落地困局:数据混乱致AI失效。提出数据血缘建设“七步法”——从目标聚焦、范围圈定、架构设计,到采集实施、知识构建、可视化应用及长效运营,强调小切口启动、业务驱动、人机协同,助力企业夯实AI根基。
|
1月前
|
SQL 关系型数据库 MySQL
MySQL慢查询诊断实战:从10秒到0.1秒,我的5步排障法
数据库小学妹分享慢查询优化实战:从10秒降至0.08秒!详解「发现→收集→分析→优化→验证」5步排障法,覆盖慢日志配置、EXPLAIN进阶、索引失效场景、JOIN与分页优化等核心技巧,附真实案例与速查表。
|
18天前
|
人工智能 运维 安全
Claude Code模型替换升级指南 接入DeepSeek V4-Pro实操与问题排查全解
当下终端AI编程工具Claude Code凭借轻量化、全流程代码处理、跨文件项目分析等优势,成为众多开发者日常编码、项目重构、漏洞修复、脚本编写的主流选择。原生状态下Claude Code绑定专属模型运行,虽然基础能力稳定,但在代码理解、长逻辑推理、中文场景适配、调用成本等方面仍存在优化空间。
746 8
|
18天前
|
存储 人工智能 算法
告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
TrendRadar 是一个轻量级、易部署的热点新闻聚合与推送工具。它能够从知乎、抖音、B站、微博、百度、华尔街见闻等11个主流平台抓取热搜榜单,然后根据你设定的关键词进行智能筛选,最终将你最关心的内容推送到手机或邮箱。
328 13
 告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
|
8天前
|
人工智能 缓存 运维
CC Switch路由代理技术解析:Codex CLI无缝对接DeepSeek模型实操指南
在现代AI开发与命令行智能编程场景中,Codex CLI是开发者常用的命令行智能辅助工具,能够实现代码生成、问题排查、脚本编写、项目调试等自动化能力。但原生Codex CLI存在明显的适配局限,其底层仅兼容OpenAI Responses API协议,无法直接对接DeepSeek等主流第三方大模型。市面上绝大多数第三方开源、商用大模型均采用Chat Completions API协议,两种协议在请求结构、参数格式、流式返回规则、响应字段定义上完全不互通,直接填写第三方模型接口地址会出现接口404报错、参数解析失败、流式内容中断、模型列表加载异常等各类问题,极大限制了Codex CLI的模型拓展
353 1

热门文章

最新文章