python采集电商商品详情数据接口,API接口系列

0 阅读3分钟

Python采集电商商品详情数据接口指南

下面我将介绍如何使用Python采集电商平台的商品详情数据,包括常见的API接口类型、请求方法、数据处理以及反爬策略。

一、常见电商平台API接口类型

1. 官方开放API

  • 特点:需要申请API key,有调用频率限制

  • 示例

    • 淘宝开放平台API
    • 京东开放平台API
    • 亚马逊Product Advertising API

2. 网页端接口(Web API)

  • 特点:通过分析网页请求找到的数据接口

  • 常见形式

    • JSON/JSONP接口
    • GraphQL接口
    • RESTful API

3. 移动端API

  • 特点:通常比网页端接口更简洁

  • 获取方法

    • 使用抓包工具(Fiddler/Charles)分析手机App请求
    • 模拟App的请求头(User-Agent, Token等)

二、完整采集示例代码

示例1:模拟请求电商平台商品详情API

python
	import requests

	import json

	from typing import Dict, Optional

	 

	def get_product_details(api_url: str, params: Dict, headers: Dict) -> Optional[Dict]:

	    """

	    获取电商商品详情

	    

	    参数:

	        api_url: API接口地址

	        params: 请求参数

	        headers: 请求头信息

	        

	    返回:

	        商品详情字典或None(请求失败时)

	    """

	    try:

	        # 设置超时时间,避免长时间等待

	        response = requests.get(

	            api_url,

	            params=params,

	            headers=headers,

	            timeout=(5, 10)  # 连接超时5秒,读取超时10秒

	        )

	        

	        # 检查响应状态码

	        response.raise_for_status()

	        

	        # 尝试解析JSON数据

	        data = response.json()

	        

	        # 检查业务逻辑是否成功(根据实际API返回结构调整)

	        if data.get('code') == 200 or 'data' in data:

	            return data.get('data') or data

	        else:

	            print(f"API返回错误: {data.get('message', '未知错误')}")

	            return None

	            

	    except requests.exceptions.RequestException as e:

	        print(f"请求失败: {str(e)}")

	        return None

	    except json.JSONDecodeError:

	        print("响应内容不是有效的JSON格式")

	        return None

	 

	# 示例使用 - 淘宝/天猫商品详情API(模拟)

	if __name__ == "__main__":

	    # 实际使用时需要替换为真实的API端点和参数

	    api_url = "https://acs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0"

	    

	    # 请求参数 - 通常需要分析网页或App获取

	    params = {

	        "itemNumId": "123456789",  # 商品ID

	        "detailParams": "{"itemId":"123456789"}",

	        # 其他必要参数...

	    }

	    

	    # 请求头 - 模拟手机App请求

	    headers = {

	        "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15",

	        "Referer": "https://item.taobao.com",

	        "Accept": "application/json",

	        # 可能需要添加认证token等

	    }

	    

	    product_data = get_product_details(api_url, params, headers)

	    

	    if product_data:

	        # 保存到文件

	        with open("product_detail.json", "w", encoding="utf-8") as f:

	            json.dump(product_data, f, ensure_ascii=False, indent=2)

	        print("商品详情采集成功!")

	    else:

	        print("商品详情采集失败")

示例2:处理分页和批量采集

python
	import time

	import random

	 

	def batch_fetch_products(product_ids: List[str], api_url: str, headers: Dict) -> List[Dict]:

	    """

	    批量采集多个商品详情

	    

	    参数:

	        product_ids: 商品ID列表

	        api_url: API接口地址

	        headers: 请求头信息

	        

	    返回:

	        采集成功的商品详情列表

	    """

	    all_products = []

	    

	    for product_id in product_ids:

	        params = {

	            "itemNumId": product_id,

	            # 其他参数...

	        }

	        

	        print(f"正在采集商品ID: {product_id}")

	        product_data = get_product_details(api_url, params, headers)

	        

	        if product_data:

	            all_products.append(product_data)

	        

	        # 随机延迟,避免请求过于频繁

	        time.sleep(random.uniform(0.5, 1.5))

	    

	    return all_products

三、典型商品详情JSON数据结构

json
	{

	  "success": true,

	  "code": 200,

	  "message": "请求成功",

	  "data": {

	    "product_id": "123456789",

	    "title": "商品标题名称",

	    "category": {

	      "id": "50012345",

	      "name": "手机"

	    },

	    "price_info": {

	      "original_price": 5999.00,

	      "current_price": 4999.00,

	      "discount": "8.3折",

	      "promotions": [

	        {

	          "type": "满减",

	          "description": "满5000减500"

	        }

	      ]

	    },

	    "stock": {

	      "total": 1000,

	      "available": 892,

	      "status": "有货"

	    },

	    "specs": [

	      {

	        "name": "颜色",

	        "values": ["黑色", "白色", "蓝色"]

	      },

	      {

	        "name": "存储",

	        "values": ["128G", "256G", "512G"]

	      }

	    ],

	    "images": [

	      "https://img.example.com/product/1/1.jpg",

	      "https://img.example.com/product/1/2.jpg"

	    ],

	    "description": "商品详细描述HTML或文本内容...",

	    "shop_info": {

	      "shop_id": "10001",

	      "name": "官方旗舰店",

	      "score": 4.8,

	      "is_official": true

	    },

	    "service": {

	      "warranty": "1年质保",

	      "return_policy": "7天无理由退货",

	      "delivery": "包邮"

	    },

	    "sales": {

	      "monthly_sales": 15623,

	      "total_sales": 125632,

	      "comment_count": 2563

	    }

	  }

	}

五、常见电商平台API特点

淘宝/天猫

  • 使用MTOP (Mobile Taobao Open Platform)接口
  • 需要分析手机App请求获取API
  • 参数通常包含apivdata等字段
  • 可能需要计算tokensign

京东

  • 有开放的商品搜索API
  • 移动端API通常以https://api.m.jd.com/client.action开头
  • 需要functionId等参数标识接口功能

亚马逊

  • Product Advertising API需要申请
  • 使用ItemLookup等操作查询商品
  • 需要AWS访问密钥