Python爬虫获取1688商品(按图搜索)接口的返回数据说明

一、引言

在电商领域,按图搜索功能(类似于淘宝的拍立淘)已经成为一种重要的商品检索方式。通过上传图片,用户可以快速找到与图片相似的商品,极大地提升了购物体验。1688作为国内领先的B2B电商平台,也提供了类似的按图搜索接口,供开发者使用。本文将详细介绍如何使用Python爬虫调用1688的按图搜索接口,并重点分析接口返回数据的结构和含义。

二、接口调用

(一)准备工作

  1. 注册账号与获取API密钥 在使用1688的API接口之前,需要在1688开放平台注册账号,并创建应用以获取app_keyapp_secret。这两个密钥是调用API接口的必要凭证,用于身份验证。

  2. 安装必要的Python库 调用API接口需要使用到以下Python库:

    • requests:用于发送HTTP请求。

    • hashlib:用于生成签名。

    • time:用于处理时间戳。

    • json:用于处理JSON数据。

(二)调用按图搜索接口

  1. 接口URL 1688的按图搜索接口URL为:https://api.1688.com/router/rest

  2. 请求参数 调用按图搜索接口时,需要提供以下参数:

    • app_key:你的应用app_key

    • method:接口方法名称,固定为1688.item_search_img

    • format:返回数据格式,固定为json

    • v:API版本号,固定为2.0

    • timestamp:时间戳,单位为秒。

    • sign_method:签名方法,固定为md5

    • sign:签名,用于验证请求的合法性。

    • imgid:图片的URL或ID,指向你要搜索的商品图片。

    • cat(可选):商品类目ID,用于限定搜索范围。

    • page(可选):分页参数,指定返回结果的页码。

以下是调用按图搜索接口的Python代码示例:

Python

python 复制代码
import requests
import hashlib
import time
import json

def generate_sign(params, app_secret):
    """生成签名"""
    sorted_params = sorted(params.items())
    sign_content = ''.join(['%s%s' % (k, v) for k, v in sorted_params]) + app_secret
    sign = hashlib.md5(sign_content.encode('utf-8')).hexdigest().upper()
    return sign

def search_items_by_img(app_key, app_secret, img_url, cat=None, page=1):
    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': img_url,
        'cat': cat if cat else '',
        'page': page
    }
    params['sign'] = generate_sign(params, app_secret)
    response = requests.get(url, params=params)
    if response.status_code == 200:
        return response.json()
    else:
        print("请求失败, 状态码:", response.status_code)
        return None

app_key = "your_app_key"
app_secret = "your_app_secret"
img_url = "http://g-search3.alicdn.com/img/bao/uploaded/i4/O1CN01IDpcD81zHbpHs1YgT_!!2200811456689.jpg"
response_data = search_items_by_img(app_key, app_secret, img_url, cat=None, page=1)

三、返回数据说明

调用按图搜索接口后,1688会返回一个JSON格式的响应数据。以下是对返回数据结构和字段含义的详细说明。

(一)返回数据结构

返回数据是一个JSON对象,其结构如下:

JSON

javascript 复制代码
{
    "code": "200",
    "message": "success",
    "items": {
        "item": [
            {
                "title": "商品标题",
                "pic_url": "商品图片URL",
                "price": "商品价格",
                "sales": "商品销量",
                "detail_url": "商品详情页URL",
                "shop_name": "店铺名称",
                "shop_url": "店铺首页URL",
                "distance": "与搜索图片的相似度"
            },
            ...
        ]
    }
}

(二)字段含义

  1. code

    • 类型:字符串

    • 含义:返回状态码,表示请求是否成功。常见的状态码有:

      • 200:请求成功。

      • 400:请求参数错误。

      • 401:身份验证失败。

      • 500:服务器内部错误。

  2. message

    • 类型:字符串

    • 含义:返回状态信息,用于描述请求的结果。例如:

      • success:请求成功。

      • invalid parameters:请求参数无效。

      • authentication failed:身份验证失败。

      • internal server error:服务器内部错误。

  3. items

    • 类型:JSON对象

    • 含义:搜索结果的商品列表。如果搜索结果为空,则items字段不存在。

  4. item

    • 类型:JSON数组

    • 含义:包含多个商品信息的数组,每个元素是一个JSON对象,表示一个商品。

  5. title

    • 类型:字符串

    • 含义:商品的标题,用于描述商品的基本信息。

  6. pic_url

    • 类型:字符串

    • 含义:商品的图片URL,指向商品的主图。

  7. price

    • 类型:字符串

    • 含义:商品的价格,表示商品的售价。

  8. sales

    • 类型:整数

    • 含义:商品的销量,表示商品的销售数量。

  9. detail_url

    • 类型:字符串

    • 含义:商品详情页的URL,点击后可以查看商品的详细信息。

  10. shop_name

    • 类型:字符串

    • 含义:店铺的名称,表示商品所属的店铺。

  11. shop_url

    • 类型:字符串

    • 含义:店铺首页的URL,点击后可以进入店铺的首页。

  12. distance

    • 类型:浮点数

    • 含义:与搜索图片的相似度,值越小表示相似度越高。

(三)示例返回数据

以下是一个完整的示例返回数据:

JSON

javascript 复制代码
{
    "code": "200",
    "message": "success",
    "items": {
        "item": [
            {
                "title": "新款时尚连衣裙",
                "pic_url": "https://img.alicdn.com/img/bao/uploaded/i4/TB29baudgxlpuFjy0FoXXa.lXXa_!!3003995184.jpg",
                "price": "22.00",
                "sales": 700,
                "detail_url": "//item.1688.com/item.htm?id=544603032967",
                "shop_name": "时尚女装店",
                "shop_url": "//shop.1688.com/?shop_id=123456",
                "distance": 0.12
            },
            {
                "title": "复古连衣裙",
                "pic_url": "https://img.alicdn.com/img/bao/uploaded/i4/TB21baudgxlpuFjy0FoXXa.lXXa_!!3003995184.jpg",
                "price": "30.00",
                "sales": 500,
                "detail_url": "//item.1688.com/item.htm?id=544603032968",
                "shop_name": "复古女装店",
                "shop_url": "//shop.1688.com/?shop_id=654321",
                "distance": 0.15
            }
        ]
    }
}

四、数据解析与处理

(一)解析返回数据

在获取到返回数据后,需要对其进行解析,以便提取有用的信息。以下是一个解析返回数据的Python代码示例:

Python

python 复制代码
def parse_response_data(response_data):
    if response_data and response_data.get('code') == '200':
        items = response_data.get('items', {}).get('item', [])
        for item in items:
            print("商品标题:", item.get('title'))
            print("商品图片URL:", item.get('pic_url'))
            print("商品价格:", item.get('price'))
            print("商品销量:", item.get('sales'))
            print("商品详情页URL:", item.get('detail_url'))
            print("店铺名称:", item.get('shop_name'))
            print("店铺首页URL:", item.get('shop_url'))
            print("与搜索图片的相似度:", item.get('distance'))
            print("-" * 40)
    else:
        print("请求失败, 错误信息:", response_data.get('message'))

parse_response_data(response_data)

(二)数据处理

解析返回数据后,可以根据实际需求对数据进行进一步处理。例如:

  • 将数据存储到本地文件(如CSV、JSON)或数据库中,方便后续分析。

  • 对数据进行筛选、排序或统计分析,提取有价值的信息。

  • 将数据用于机器学习模型的训练,以实现商品推荐等功能。

五、注意事项

(一)反爬虫机制

1688有复杂的反爬虫机制,建议在调用接口时注意以下几点:

  • 设置合理的请求间隔,避免被封禁。

  • 使用代理IP,模拟真实用户行为。

  • 随机生成User-Agent,避免被识别为爬虫。

(二)数据合法性

在使用爬虫获取数据时,务必遵守相关法律法规,尊重数据所有者的权益。未经授权,不得将获取的数据用于商业用途。

(三)接口限制

1688的API接口通常有调用频率限制,建议在调用接口时注意以下几点:

  • 遵守接口的调用频率限制,避免因频繁调用而导致接口被禁用。

  • 合理规划调用策略,避免在短时间内集中调用接口。

六、总结

本文详细介绍了如何使用Python爬虫调用1688的按图搜索接口,并对返回数据的结构和字段含义进行了详细说明。通过解析返回数据,可以提取商品的标题、图片URL、价格、销量、详情页URL、店铺名称、店铺首页URL以及与搜索图片的相似度等信息。在实际应用中,可以根据需求对数据进行进一步处理和分析。希望本文对你有所帮助。

如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。

相关推荐
try2find17 分钟前
安装llama-cpp-python踩坑记
开发语言·python·llama
泡泡以安1 小时前
安卓高版本HTTPS抓包:终极解决方案
爬虫·https·安卓逆向·安卓抓包
博观而约取1 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector3 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
q567315233 小时前
Java Selenium反爬虫技术方案
java·爬虫·selenium
Zonda要好好学习3 小时前
Python入门Day2
开发语言·python
Vertira3 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉3 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗3 小时前
黑马python(二十四)
开发语言·python
晓13134 小时前
OpenCV篇——项目(二)OCR文档扫描
人工智能·python·opencv·pycharm·ocr