Python采集1688拍立淘按图搜索,json数据返回

发布于:2025-09-13 ⋅ 阅读:(20) ⋅ 点赞:(0)

要实现Python采集1688拍立淘按图搜索并返回JSON数据,需遵循以下步骤及代码示例:

1. 准备工作

  • 注册开放平台账号:注册开发者账号并创建应用,获取app_keyapp_secret
  • 开通API权限:在应用管理页面开通“图片搜索”API权限。
  • 安装依赖库
    pip install requests hashlib

2. 图片上传与签名生成

需将本地图片上传至1688图片服务器,获取图片标识imgid,并生成请求签名。

import requests
import hashlib
import time
def generate_sign(params, app_secret):
"""生成MD5签名"""
sorted_params = sorted(params.items())
sign_content = ''.join([f'{k}{v}' for k, v in sorted_params]) + app_secret
return hashlib.md5(sign_content.encode('utf-8')).hexdigest().upper()
def upload_image(app_key, app_secret, image_path):
"""上传图片并获取imgid"""
url = "https://api.1688.com/router/rest"
params = {
'app_key': app_key,
'method': '1688.upload.img',
'format': 'json',
'v': '2.0',
'timestamp': int(time.time()),
'sign_method': 'md5'
}
with open(image_path, 'rb') as f:
files = {'file': f}
params['sign'] = generate_sign(params, app_secret)
response = requests.post(url, files=files, params=params)
if response.status_code == 200:
data = response.json()
if 'pic_url' in data:
return data['pic_url']
return None

3. 按图搜索请求

使用获取的imgid调用搜索接口,传入分页、排序等参数,返回相似商品JSON数据。

def search_by_image(app_key, app_secret, imgid, page=1, sort='price_asc'):
"""按图搜索商品"""
url = "https://api.1688.com/router/rest"
params = {
'app_key': app_key,
'method': '1688.item_search_img',
'format': 'json',
'v': '2.0',
'timestamp': int(time.time()),
'sign_method': 'md5',
'imgid': imgid,
'page': page,
'sort': sort
}
params['sign'] = generate_sign(params, app_secret)
response = requests.get(url, params=params)
return response.json() if response.status_code == 200 else None

4. 完整流程示例

# 配置参数
app_key = "YOUR_APP_KEY"
app_secret = "YOUR_APP_SECRET"
image_path = "product.jpg"
# 上传图片并获取imgid
imgid = upload_image(app_key, app_secret, image_path)
if not imgid:
print("图片上传失败")
exit()
# 执行搜索
result = search_by_image(app_key, app_secret, imgid)
if result and result.get('code') == 200:
items = result['data']['items']
for item in items:
print(f"商品ID: {item['item_id']}, 标题: {item['title']}, 价格: {item['price']}")
else:
print(f"搜索失败: {result.get('message')}")