找热销爆品工具之api系列:1688图片搜索商品item_search_img

admin15小时前1688 API7
一张图片,直接搜出 1688 上的同款与相似货源,并拿到批发价、起订量、工厂标识——这就是「拍立淘」接口 1688.item_search_img 的价值。本文从接口原理到签名、参数、返回字段、代码落地、踩坑排错一次讲透,可直接用于跨境选品、ERP 比价、供应链寻源等系统。

一、为什么需要「以图搜货」?

做电商选品、跨境铺货、供应链比价的朋友几乎都遇到过同一个痛点:

手里只有一张图,没有商品 ID,也没有关键词。

  • 看到竞品爆款,想知道 1688 上有没有同款、拿货价多少;

  • 客户发来一张样品照片,要找能做的工厂;

  • 批量铺货时,一张张图片手动搜、手动比价,效率极低。

传统关键词搜索做不到这一点,因为关键词匹配的是文本,而商品真正的信息在图片里。

1688.item_search_img(俗称「拍立淘」)解决的正是这个问题:它接收一张图片,通过深度学习模型提取颜色、纹理、形状等视觉特征,与 1688 商品库中的特征向量做比对,返回同款 / 相似款 + 结构化数据。

相比 C 端淘宝拍立淘,1688 的拍立淘接口额外返回 B2B 批发专属字段:起订量(MOQ)、阶梯价、工厂标识、是否支持一件代发、发货地、30 天批发销量等——这才是做生意的关键信息。


二、接口能力速览

项目说明
接口标识1688.item_search_img
别名拍立淘、以图搜货、图片搜索商品
请求方式GET / POST(推荐 POST,传 Base64 更稳)
请求地址api.1688.com/router/res(官方网关,HTTPS)
图片传入方式① 公网图片 URL ② 图片 Base64 编码
返回格式JSON
鉴权方式AppKey + AppSecret 签名(MD5 / HMAC)
核心输出同款 / 相似款商品列表 + 相似度分数 + 批发字段

一个典型的调用流程如下:

裁剪主体/压缩/转格式


similarity 过滤


本地图片


图片预处理


公网 URL 或 Base64


构造公共参数


按规则生成 sign 签名


POST 请求网关


返回 JSON


同款/相似款筛选


取 num_iid 调商品详情接口


补全 SKU/阶梯价/库存


比价表 / 入库 / 铺货



三、接入前准备:图片规范决定成败

很多人接口调通了,但匹配结果很差,90% 的原因出在图片上。原图识别是「垃圾进,垃圾出」,务必先做预处理。

3.1 图片硬性规范

项目规范禁忌
格式JPG / JPEG、PNGGIF、WebP、透明底 PNG、拼图、长截图
大小≤ 1MB(最大不超过 4MB)超过 5MB 直接 413 报错
分辨率最小边 ≥ 256px,推荐 720–800px缩略小图、模糊截图
画面商品主体居中,主体占画面 > 60%,少水印少杂物大面积水印、多件混拍、背景杂乱、纯文字图

3.2 传图二选一

  • 方式一:公网图片 URL(推荐)

    直接传图片地址,减少 Base64 编解码异常。注意:图片服务器不能有防盗链,否则 1688 服务端拉不到图;URL 中的特殊字符要做 URL 编码。

  • 方式二:图片 Base64

    需要去掉 data:image/jpg;base64, 前缀,并清除所有换行和空格,否则会报参数错误。

3.3 图片预处理建议(提升匹配率的关键)

  1. 自动裁剪主体:用主体检测把商品从背景中抠出来,白底图识别效果最好;

  2. 去水印:水印会干扰特征提取,能用原图就别用带水印的图;

  3. 压缩:单张控制在 500KB 左右,兼顾清晰度与传输速度;

  4. 统一格式:批量任务统一转成 JPG,避免格式参差导致失败。


四、核心参数详解

4.1 公共参数(必填)

参数是否必填说明
method是固定值 1688.item_search_img
app_key是开放平台应用 Key
timestamp是时间戳(毫秒级),与平台服务器时间误差不能太大
v是固定 2.0
format是固定 json
sign_method是固定 md5(或 HMAC-SHA256)
sign是按规则生成的签名,见第五节

4.2 业务参数

参数是否必填说明
imgid是图片 URL 或清洗后的 Base64 字符串(二选一)
search_type否1 = 优先同款(默认),0 = 相似款
page否页码,默认 1
page_size否每页条数,默认 20,最大 50 / 100(视服务商而定)
cat否1688 类目 ID,有明确类目时传入,可减少无关货源
选品实战小技巧:先传 search_type=1 找同款,找不到再切 0 找相似替代件。

五、签名生成原理

阿里开放平台体系使用「参数排序 + 首尾包裹密钥 + MD5 大写」的经典签名规则,步骤如下:

  1. 把所有业务参数和公共参数(sign 除外)按 key 字典序 排序;

  2. 依次拼接为 key1value1key2value2...;

  3. 在拼接串头部和尾部各加一次 app_secret;

  4. 对最终字符串做 MD5,转 大写,即为 sign。

一眼看懂:

sign = MD5( secret + "key1value1key2value2..." + secret ).upper()

六、Python 完整实战

下面是一套「以图搜货 + 过滤 + 拉详情 + 导出 CSV」的完整代码,复制即可跑。

6.1 安装依赖

pip install requests pandas

6.2 核心代码

import hashlib
import time
import json
import base64
import requests
import pandas as pd

# ========= 1. 配置区(替换成你自己的密钥)=========
APP_KEY = "your_app_key"
APP_SECRET = "your_app_secret"
GATEWAY = "https://api.1688.com/router/rest"


# ========= 2. 签名生成 =========
def build_sign(params: dict, secret: str) -> str:
    """按阿里开放平台规则生成签名:字典排序 -> 拼接 -> 首尾包 secret -> MD5 大写"""
    sorted_keys = sorted(params.keys())
    sign_str = "".join(f"{k}{params[k]}" for k in sorted_keys)
    sign_str = secret + sign_str + secret
    return hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()


# ========= 3. 本地图片转 Base64(可选)=========
def image_to_base64(image_path: str) -> str:
    with open(image_path, "rb") as f:
        b64 = base64.b64encode(f.read()).decode("utf-8")
    # 注意:不要加 data:image/jpg;base64, 前缀
    return b64.replace("\n", "").replace("\r", "").strip()


# ========= 4. 以图搜货主函数 =========
def search_by_image(img_url: str = None,
                    img_base64: str = None,
                    search_type: int = 1,
                    page: int = 1,
                    page_size: int = 20,
                    cat: str = None) -> dict:
    if not img_url and not img_base64:
        raise ValueError("必须提供 img_url 或 img_base64 其中之一")

    params = {
        "method": "1688.item_search_img",
        "app_key": APP_KEY,
        "timestamp": str(int(time.time() * 1000)),  # 毫秒时间戳
        "v": "2.0",
        "format": "json",
        "sign_method": "md5",
        "imgid": img_url if img_url else img_base64,
        "search_type": search_type,
        "page": page,
        "page_size": page_size,
    }
    if cat:
        params["cat"] = cat

    params["sign"] = build_sign(params, APP_SECRET)

    resp = requests.post(GATEWAY, data=params, timeout=15)
    resp.raise_for_status()
    return resp.json()


# ========= 5. 解析结果 =========
def parse_items(data: dict, similarity_threshold: float = 0.7) -> pd.DataFrame:
    items = (data.get("items") or {}).get("item") or []
    rows = []
    for it in items:
        sim = float(it.get("similarity", 0) or 0)
        rows.append({
            "num_iid": it.get("num_iid"),
            "title": it.get("title"),
            "price": it.get("price"),
            "moq": it.get("moq"),
            "sales": it.get("sales"),
            "similarity": sim,
            "seller_name": it.get("seller_name"),
            "detail_url": it.get("detail_url"),
            "tag": "同款" if sim >= 0.8 else ("相似" if sim >= 0.6 else "存疑"),
        })
    df = pd.DataFrame(rows)
    if not df.empty:
        df = df[df["similarity"] >= similarity_threshold]
        df = df.sort_values("similarity", ascending=False).reset_index(drop=True)
    return df


# ========= 6. 主流程 =========
if __name__ == "__main__":
    # 方式一:直接用公网图片 URL
    result = search_by_image(
        img_url="https://cbu01.alicdn.com/img/ibank/example.jpg",
        search_type=1,       # 1=同款,0=相似款
        page=1,
        page_size=20,
    )

    # 方式二:本地图片转 Base64(二选一即可)
    # b64 = image_to_base64("./sample.jpg")
    # result = search_by_image(img_base64=b64, search_type=1)

    print("返回状态:", result.get("code"), result.get("msg"))

    df = parse_items(result, similarity_threshold=0.7)
    print(df.to_string(index=False))

    # 导出比价表
    if not df.empty:
        df.to_csv("1688_pailitao_result.csv", index=False, encoding="utf-8-sig")
        print("已导出 1688_pailitao_result.csv")

6.3 结果示例(控制台)

返回状态: 200 success
       num_iid                        title  price  moq  sales  similarity     seller_name tag
0  728510689123          2025夏新款真丝连衣裙 128.00    2    327        0.92  杭州XX服饰工厂  同款
1  728510776655              真丝雪纺连衣裙批 95.50    3    189        0.85  绍兴XX纺织    同款
2  728510812345            仿真丝连衣裙 一件代发 68.00    1     56        0.73  义乌XX服饰    相似

6.4 联动「商品详情接口」补全采购字段

拍立淘只返回基础信息,不包含阶梯价、样品费、交期等。拿到 num_iid 后,再调商品详情接口批量补全:

def get_item_detail(num_iid: str) -> dict:
    params = {
        "method": "1688.item_get",          # 详情接口
        "app_key": APP_KEY,
        "timestamp": str(int(time.time() * 1000)),
        "v": "2.0",
        "format": "json",
        "sign_method": "md5",
        "num_iid": num_iid,
    }
    params["sign"] = build_sign(params, APP_SECRET)
    resp = requests.post(GATEWAY, data=params, timeout=15)
    return resp.json()


# 对搜到的 Top N 商品批量拉详情
for iid in df["num_iid"].head(5):
    detail = get_item_detail(iid)
    # detail 中可拿到:阶梯批发价、SKU、库存、重量、材质、发货时效等

七、返回字段全解析

7.1 顶层结构

{
"code"
:
200
,
"msg"
:
"success"
,
"request_id"
:
"12345abcde"
,
"items"
:
{
"page"
:
"1"
,
"real_total_results"
:
670
,
"total_results"
:
670
,
"pagecount"
:
14
,
"page_size"
:
"50"
,
"item"
:
[
"..."
]
}
}
字段类型说明
codeInteger状态码,200 / 0 表示成功(以服务商文档为准)
msgString状态描述,失败时给出错误原因
request_idString请求唯一标识,用于问题追踪与日志定位
items.pageString当前页码
items.real_total_resultsInteger实际库中命中同款 + 相似款总量
items.total_resultsInteger本次可翻页总量
items.pagecountInteger总页数
items.page_sizeString每页条数
items.itemArray商品数组,见下表

7.2 单个商品字段(item[])

字段类型示例业务含义
num_iidString728510689123商品数字 ID,用于调详情接口
titleString2025夏新款真丝连衣裙商品标题
pic_urlStringcbu01.alicdn.com/...商品主图(1688 压缩图)
priceFloat/String128.00批发价 / 代发价(元)
price_rangeObject{"min_price":95,"max_price":135}多 SKU 时的价格区间
unitString件计价单位
moqInt2最小起订量(MOQ)
salesInt327近 30 天已售件数
similarityFloat0.87图片相似度 0~1,> 0.8 可视为同款
seller_nameString杭州XX服饰工厂店铺名称
detail_urlStringdetail.1688.com/...商品详情页链接
delivery_placeString浙江 义乌发货地
重点字段:similarity(相似度) —— 这是整个接口最核心的字段,可以据此写死筛选规则:
  • < 0.7:丢弃,匹配偏差太大;

  • 0.7 ~ 0.8:相似款,人工复核;

  • ≥ 0.8:高度同款,自动进入成本核算流程。



八、五大落地场景

场景 1:跨境选品 / 无货源铺货

海外平台看到爆款 → 截图 → 拍立淘找 1688 同款 → 过滤贸易商、优先工厂店 → 校验是否支持一件代发 → 调详情算到手价与毛利 → 一键铺货。

场景 2:企业采购寻源 / 样品比价

采购手里只有样品照片 → 拍立淘匹配同款和相似替代件 → 组装比价表 → 高相似度直接对接工厂打样。

场景 3:商品溯源 / 侵权排查

品牌方用商品图反查 1688 上的疑似侵权货源,定位店铺与商品链接。

场景 4:ERP / 供应链 SaaS 集成

将拍立淘能力嵌入 ERP、选品系统,把「图搜 → 详情 → 比价 → 入库」串成自动化流水线。

场景 5:批量图库匹配

电商运营有一批商品图,需要批量找到对应货源,用异步队列跑拍立淘,结果落库做持续监控。


九、性能优化与踩坑排错

9.1 常见报错与原因

现象可能原因解决
413 超限图片超过大小限制压缩到 1MB 以内
参数错误Base64 带了 data:image/...;base64, 前缀去掉前缀、清除换行空格
匹配结果为空/偏差大图片有水印、多件混拍、背景杂乱裁剪主体、去水印、换白底图
拉不到图图片服务器有防盗链先下载再上传到自己的图床 / OSS
签名错误参数未排序 / 未首尾包 secret / 未转大写严格按签名规则重写
429 / 限流并发过高或超出配额做限流、加缓存、异步队列

9.2 优化建议

  1. 必须做异步任务队列:批量选品不要并发猛攻接口,否则一定触发限流;

  2. 相同图片做本地缓存:短时间内重复检索直接读缓存,节省调用额度;

  3. 图片预处理前置:自动裁剪 + 去水印 + 压缩到 500KB 左右,匹配率提升最明显;

  4. 结果去重:同一 num_iid 可能在多次搜索中重复出现,入库前要去重;

  5. 相似度分级:把 similarity 写成可配置阈值,不同业务用不同标准。


十、合规提示

使用拍立淘接口时,请务必遵守:

  • 遵守 1688 开放平台开发者协议及数据使用规范,不得将数据用于违法用途;

  • 尊重知识产权,不得用于批量抓取、恶意爬取或侵犯他人商标/著作权的行为;

  • 图片素材应确保来源合法,避免上传涉密、侵权或违规图片;

  • 涉及个人信息或交易数据时,遵循《个人信息保护法》《数据安全法》等相关法规;

  • 合理控制调用频率,避免对平台造成压力。


十一、总结

1688.item_search_img 把「一张图」变成「一批结构化货源」,是做选品、比价、寻源、铺货的核心能力。落地要点浓缩成四句话:

  1. 图片预处理是成败关键——裁剪、去水印、压到 500KB,白底主体图最好;

  2. 签名规则记牢——排序、拼接、首尾包 secret、MD5 大写;

  3. 相似度是灵魂字段——用 0.7 / 0.8 两级阈值做自动筛选;

  4. 拍立淘 + 详情接口组合出击——图搜拿 ID,详情补 SKU、阶梯价、库存,才能做出完整比价表。

掌握这套打法,就能把「以图搜货」真正接入到自己的选品与供应链系统里。


关于接入: 如果你没有企业资质、不想自己处理签名与限流,也可以通过第三方聚合 API 服务商快速接入,免资质、开箱即用。有代采 / 转发 / 转售需求的朋友,欢迎留言或私信交流,可提供免费测试额度.


相关文章

1688拍立淘API接口:通过图片获取商品列表

1688拍立淘API接口:通过图片获取商品列表

 item_search_img-按图搜索1688商品(拍立淘)1688.item_search_img编辑公共参数 名称 类型 必须 描述...

1688商品采集API实战指南:从接入到数据落地全流程

在电商数据分析、竞品监控、供应链整合等场景中,1688平台的商品数据具有极高的商业价值。直接爬虫采集不仅面临法律风险,还容易触发平台反爬机制导致IP封禁。1688开放平台提供的商品采集相关API,是合...

1688 商品详情 API 深度对接:字段说明、异常处理与性能优化

在B2B供应链数字化对接中,1688商品详情API是连接平台与第三方系统(ERP、进销存、自建采购平台等)的核心接口,其对接的稳定性、数据准确性直接影响业务效率。不同于基础接口的简单调用,商品详情AP...

1688商品详情采集API调用实例分享测试

1688商品详情采集API调用实例分享测试

 编辑1688是国内工厂货源的最大电商平台。上面可以找到大量工厂直接供货的低价商品。从事跨境电商代采的商家们,都喜欢把1688作为自己的供应链。商品采集API可以实现快速批量自动化上货。it...

1688商品详情API应用之无货源铺货 SAAS:合规采集、多平台一键上架、SKU / 库存 / 价格自动同步

1688商品详情API应用之无货源铺货 SAAS:合规采集、多平台一键上架、SKU / 库存 / 价格自动同步

 1688商品详情接口:item_get,item_get_pro通过商品id获取商品详情信息,包括商品标题、价格、url,商品主图、详情图,sku信息等。点此测试API编辑公共参数...

获得1688商品详情 API 返回值说明

公共参数请求地址: https://api-gw.onebound.cn/1688/item_get名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretStri...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。