Python采集1688拍立淘按图搜索,json数据返回
要实现Python采集1688拍立淘按图搜索并返回JSON数据,需遵循以下步骤及代码示例:
1. 准备工作
- 注册开放平台账号:注册开发者账号并创建应用,获取
app_key
和app_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')}") |