从 0 到 1”用 Python 调用 1688 关键词搜索 API 的完整解析

部署运行你感兴趣的模型镜像

以下示例演示了“从 0 到 1”用 Python 调用 1688 关键词搜索 API 的完整思路。
示例基于 1688 官方开放平台接口(item_search),全部代码可一次性复制运行,只需把
AppKey / AppSecret / AccessToken 换成自己后台申请的即可。


一、接口速览

接口英文名作用调用方式返回格式
item_search关键词搜索商品列表GET / POSTJSON

核心请求参数

  • q:关键词(必填)

  • page:页码,从 1 开始

  • page_size:每页条数(官方最大 50)

  • sort:排序,如 sale 销量、price 价格

  • sign:签名(算法见下文)


二、签名生成(官方 MD5 模式)

1688 要求所有私有参数必须拼接后做 MD5,否则直接 403。

import hashlib, urllib.parse

def generate_sign(params: dict, app_secret: str) -> str:
    """
    官方签名算法:AppSecret + 自然序拼接串 + AppSecret → MD5 → 大写
    """
    # 1) 自然序排序
    sorted_pairs = sorted(params.items(), key=lambda x: x[0])
    # 2) 拼接成 k1v1&k2v2
    query_str = urllib.parse.urlencode(sorted_pairs, safe=',')
    # 3) 前后加 Secret
    raw = f"{app_secret}{query_str}{app_secret}"
    # 4) MD5 大写
    return hashlib.md5(raw.encode()).hexdigest().upper()

三、单页搜索函数

import requests, time, json

# ===== 全局变量 =====
APP_KEY = "你的AppKey"
APP_SECRET = "你的AppSecret"
ACCESS_TOKEN = "你的AccessToken"     # OAuth2 获取,见官方文档
API_GATEWAY = "https://open.1688.com/api/param2/1/com.alibaba.product/search/"

def search_1688(keyword: str, page: int = 1, page_size: 50):
    """返回一页商品列表(list[dict])"""
    params = {
        "access_token": ACCESS_TOKEN,
        "q": keyword,
        "page": page,
        "pageSize": page_size,
        "sort": "sale",          # 按销量排序
        "timestamp": int(time.time()),
    }
    params["sign"] = generate_sign(params, APP_SECRET)

    resp = requests.get(API_GATEWAY, params=params, timeout=15)
    resp.raise_for_status()
    data = resp.json()

    if data.get("error_code"):
        raise RuntimeError(f"API 错误:{data}")
    # 不同版本字段略有区别,这里取最常见路径
    return data["result"]["products"]   # list[dict]

四、批量 + 落盘:10 行代码抓 1000 条

import pandas as pd

KEYWORD = "连衣裙"
MAX_PAGE = 20          # 20×50=1000 条,按需调整

all_prods = []
for p in range(1, MAX_PAGE + 1):
    try:
        page_data = search_1688(KEYWORD, page=p)
        all_prods.extend(page_data)
        print(f"第 {p} 页 OK,累计 {len(all_prods)} 条")
    except Exception as e:
        print(f"第 {p} 页失败:{e}")
        break
    time.sleep(1.5)      # 友好限速

# 只保留常用字段
df = pd.DataFrame(all_prods)[
    ["productId", "subject", "price", "saleCount", "imageUrl", "detailUrl"]
]
df.to_csv(f"1688_{KEYWORD}.csv", index=False, encoding="utf-8-sig")
print("已保存 >>> 1688_连衣裙.csv")

五、字段释义(实际以返回为准)

字段含义
productId商品数字 ID
subject商品标题
price单价(元)
saleCount近 30 天销量
imageUrl主图 400×400
detailUrl商品详情页 PC 地址

六、常见坑 & 解决方案

  1. 403 / 401

    • 忘记加 sign 或顺序不对 → 用上方函数重新生成

    • AccessToken 过期 → 重新走 OAuth2 刷新流程

  2. 返回为空

    • 关键词过于长尾 → 换热门词或调大 page_size

    • 类目限制 → 在后台申请“商品搜索”权限

  3. 频率限制

    • 官方默认 300 次/分钟,超出会报错 request too fast

    • 脚本里 sleep(1~2s) 基本安全


七、结语

以上代码可直接落地,实现“输入关键词 → 输出 Excel”的自动化。
后续你可以:

  • threading/asyncio 做并发,提高抓取速度

  • 把结果写进 MySQL / Mongo,供 BI 工具实时查询

  • 对接企业微信 / 飞书机器人,每日推送热门商品销量榜

记得遵守 1688 开放平台条款,合理控制调用频率,只做内部商业分析,勿对外直接转售数据。祝采集顺利!

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值