当前位置: 首页 > article >正文

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

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

{
    "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

{
    "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

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以及与搜索图片的相似度等信息。在实际应用中,可以根据需求对数据进行进一步处理和分析。希望本文对你有所帮助。

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


http://www.kler.cn/a/600412.html

相关文章:

  • vulnhub-Tr0ll ssh爆破、wireshark流量分析,exp、寻找flag。思维导图带你清晰拿到所以flag
  • 蓝桥杯——————数位排序(java)
  • uniapp自身bug | uniapp+vue3打包后 index.html无法直接运行
  • Android Compose 框架基本状态管理(mutableStateOf、State 接口)深入剖析(十四)
  • Unity将运行时Mesh导出为fbx
  • 基于websocketpp实现的五子棋项目
  • MIPI 详解:XAPP894 D-PHY Solutions
  • 北京交通大学第三届C语言积分赛
  • 新手如何使用 Milvus
  • 大数据学习(83)-数仓建模理论
  • 新版 eslintrc 文件弃用 .eslintignore已弃用 替代方案
  • x-cmd install | Wuzz - Web 开发与安全测试利器,交互式 HTTP 工具
  • 基于javaweb的SpringBoot公司财务管理设计与实现(源码+文档+部署讲解)
  • Linux上位机开发实战(编写API库)
  • VitePress由 Vite 和 Vue 驱动的静态站点生成器
  • Python:单例模式魔法方法
  • 【机器学习】--二分类
  • flink广播算子Broadcast
  • matlab近似计算联合密度分布
  • 当汉堡遇上便当:TypeScript命名空间 vs JavaScript模块化