×

【电商黑科技】如何用Python实现“以图搜货”?1688拍立淘API实战详解

Noah Noah 发表于2026-04-07 11:01:31 浏览16 评论0

抢沙发发表评论

一、 核心接口选型:item_search_img

要实现这一功能,我们使用的是OneBound提供的 1688.item_search_img 接口。该接口模拟了1688客户端的“拍照搜索”逻辑。

  • 接口名称1688.item_search_img

  • 请求地址https://api-gw.onebound.cn/1688/item_search_img

  • 核心能力:接收图片URL,返回1688平台上的相似商品列表及详细数据。

二、 接入前的准备工作

在编写代码之前,你需要完成以下步骤:

  1. 注册开发者账号:前往 OneBound (万邦) 开放平台注册并获取 Key 和 Secret

  2. 图片预处理:API目前仅支持图片URL参数。如果你的图片在本地,需要先将其上传到公网服务器获取链接,或者使用支持Base64的SDK(具体视平台最新版本而定,本文档示例基于URL参数)。

三、 核心参数详解

根据官方文档,调用该接口需要传递以下关键参数:

参数名类型是否必须说明
keyString你申请的API调用Key
imgidString图片地址 (URL编码)。例如:https://img.alicdn.com/...
sortString排序方式。如 sale-desc (销量降序)、bid2 (总价)
cacheString是否使用缓存 (yes/no),默认yes,速度更快

注意imgid 参数直接填入图片的网络地址。如果图片防盗链,可能需要先下载再上传到图床。

四、 Python 实战代码示例

以下代码展示了如何通过Python发送GET请求,并解析返回的JSON数据。

1. 安装依赖

pip install requests

2. 完整代码

import requestsimport urllib.parseimport jsondef search_1688_by_image(image_url, api_key, api_secret):    """    通过图片URL搜索1688商品    :param image_url: 本地或网络图片的URL(需可被API服务器访问)    :param api_key: OneBound平台的Key    :param api_secret: OneBound平台的Secret    :return: 解析后的JSON数据    """    # 1. 对图片URL进行URL编码,防止特殊字符报错    encoded_img_url = urllib.parse.quote(image_url, safe='')        # 2. 构造请求URL    # 注意:部分参数如secret可能在URL中传递,生产环境建议使用POST或鉴权SDK    url = f"https://api-gw.onebound.cn/1688/item_search_img/"        # 请求参数    params = {        'key': api_key,        'secret': api_secret, # 注意安全,勿泄露        'imgid': encoded_img_url, # 核心图片参数        'cache': 'yes', # 启用缓存加速        'result_type': 'json'    }    headers = {        "Accept-Encoding": "gzip",        "Connection": "close"    }    try:        # 3. 发送GET请求        response = requests.get(url, params=params, headers=headers, timeout=10)        response.raise_for_status() # 检查HTTP错误                data = response.json()                # 4. 解析数据        if data.get('error_code') == '0000':            print(f"搜索成功,共找到 {data['items']['total_results']} 个结果")            return parse_search_results(data['items']['item'])        else:            print(f"API调用失败: {data.get('reason')} [Code: {data.get('error_code')}]")            return None                except requests.exceptions.RequestException as e:        print(f"网络请求异常: {e}")        return Nonedef parse_search_results(raw_items):    """    清洗和格式化返回的商品数据    """    results = []    for item in raw_items:        result = {            '商品标题': item.get('title'),            '商品ID': item.get('num_iid'),            '价格': item.get('price'),            '销量': item.get('sales', 'N/A'),            '图片链接': item.get('pic_url'),            '详情页': item.get('detail_url'),            '是否一件代发': item.get('one_psale'),            '是否精选货源': item.get('is_jxhy')        }        results.append(result)    return results# --- 执行脚本 ---if __name__ == "__main__":    # 请替换为你的实际参数    API_KEY = "YOUR_ONEBOUND_API_KEY"     API_SECRET = "YOUR_ONEBOUND_API_SECRET"        # 测试图片URL (示例为篮球袜,来自文档)    # 你可以替换为任何1688商品的实拍图URL    TEST_IMAGE_URL = "http://g-search3.alicdn.com/img/bao/uploaded/i4/O1CN01IDpcD81zHbpHs1YgT_!!2200811456689.jpg"        # 调用函数    goods_data = search_1688_by_image(TEST_IMAGE_URL, API_KEY, API_SECRET)        if goods_data:        # 打印前3个结果预览        print(json.dumps(goods_data[:3], ensure_ascii=False, indent=2))

五、 返回数据结构解析

调用成功后,API返回标准JSON。根据文档示例,核心数据结构如下:

{  "items": {    "total_results": 670, // 总搜索结果数    "item": [      {        "title": "斗牛2.0篮球袜长筒男实战...",        "price": "4.50",         "sales": 25452, // 销量        "num_iid": 741422477524, // 商品ID        "pic_url": "https://cbu01.alicdn.com/...",        "detail_url": "https://detail.1688.com/offer/..."      }    ]  },  "error_code": "0000" // 0000代表成功}

关键字段提取:

  • num_iid:这是商品的唯一ID,可用于后续调用 item_get 接口获取更详细的库存和SKU信息。

  • one_psale:布尔值,判断是否支持“一件代发”,这对无货源电商非常重要。

  • is_jxhy:判断是否为“精选货源”,通常代表厂家直供,质量较有保障。

六、 常见错误码与解决方案

在实际调试中,如果遇到问题,请参考官方文档的错误码表:

错误码含义解决方案
0000success调用成功
2000Search success but no result图片未匹配到商品,尝试更换更清晰的实物图
4003Param error检查 imgid 参数是否为空或URL格式错误
4005Invalid authentication credentialsKey或Secret填写错误
4008API rate limit exceeded调用频率超限,降低请求频率

七、 进阶应用场景

  1. 本地图片上传
    如果你手里是本地图片(Bytes),需要先将其转换为URL。可以使用OneBound的 upload_img 接口,或者先上传至COS/OSS等对象存储服务,再将生成的URL传给 item_search_img

  2. 结合OCR识别
    对于包装盒或带有文字的图片,可以先调用 img2text (图片识别商品接口) 提取关键词,再结合 item_search 进行文本+图片的混合搜索,提高准确率。

  3. 批量监控
    将此脚本加入定时任务(Crontab),定期扫描竞品图片,监控其在1688上的上新情况和价格波动。

作者: 供应链数据工程师
版权声明: 转载请注明出处。

互动: 你尝试用代码搜过什么有趣的商品?欢迎在评论区分享你的搜索结果!


群贤毕至

访客