在电商领域,1688 作为国内领先的 B2B 平台,拥有海量的商品信息。批量采集 1688 商品详情数据对于市场调研、竞品分析、选品决策等具有重要意义。本文将详细介绍如何使用 Python 实现 1688 商品详情数据的批量采集,包括商品的属性、详情图、SKU、价格等信息。

一、准备工作

1.1 注册 1688 开放平台账号

点击注册账号获取 App Key 和 App Secret进行测试。

1.2 安装依赖库

在 Python 中,我们将使用以下库来完成任务:

  • requests:用于发送 HTTP 请求。

  • hashlib:用于生成签名。

  • pandas:用于数据存储和导出。

可以通过以下命令安装这些库:

bash

pip install requests pandas

二、调用 1688 商品详情 API

1688 开放平台提供了 1688.item_get 接口,用于获取商品的详细信息,包括标题、价格、图片、详情描述、SKU 等。

2.1 构造请求参数

以下是调用该接口所需的参数:

参数名称 类型 是否必填 说明
method String API 方法名,固定为 1688.item_get
app_key String 应用的 App Key
timestamp String 请求时间戳,格式为 YYYY-MM-DD HH:MM:SS
v String API 版本号,固定为 2.0
sign_method String 签名方法,固定为 md5
num_iid Long 商品的唯一标识 ID
fields String 需要返回的字段,如 title,price,pic_url,desc,sku

2.2 生成签名

签名用于验证请求的合法性。以下是生成签名的代码示例:

import hashlib

def generate_sign(params, app_secret):
    sorted_params = sorted(params.items())
    param_str = ''.join([f"{k}{v}" for k, v in sorted_params])
    sign_str = f"{app_secret}{param_str}{app_secret}"
    return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()

2.3 发送请求并解析返回值

以下是完整的代码示例,展示如何调用 API 并解析返回值:

import requests
import time

def get_taobao_item(app_key, app_secret, num_iid):
    url = "https://eco.1688.com/router/rest"
    params = {
        "method": "1688.item.get",
        "app_key": app_key,
        "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
        "v": "2.0",
        "sign_method": "md5",
        "num_iid": num_iid,
        "fields": "num_iid,title,price,pic_url,desc,sku,props_name"
    }
    params["sign"] = generate_sign(params, app_secret)
    response = requests.get(url, params=params)
    return response.json()

# 示例调用
app_key = "YOUR_APP_KEY"
app_secret = "YOUR_APP_SECRET"
num_iid = "123456789"  # 示例商品 ID
result = get_taobao_item(app_key, app_secret, num_iid)

if result.get("item"):
    item = result["item"]
    print(f"商品标题: {item['title']}")
    print(f"商品价格: {item['price']}")
    print(f"商品图片: {item['pic_url']}")
    print(f"商品详情: {item['desc']}")
    print(f"SKU: {item.get('sku', 'N/A')}")
else:
    print("请求失败:", result.get("error_response", {}).get("msg"))

三、批量采集商品详情数据

3.1 获取商品 ID 列表

在批量采集之前,需要先获取一批商品的 ID。可以通过 1688 搜索接口获取搜索结果中的商品 ID 列表。

def get_search_results(app_key, app_secret, keyword, page_no=1, page_size=40):
    url = "https://eco.1688.com/router/rest"
    params = {
        "method": "1688.item.search",
        "app_key": app_key,
        "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
        "v": "2.0",
        "sign_method": "md5",
        "keywords": keyword,
        "page_no": page_no,
        "page_size": page_size,
        "fields": "num_iid"
    }
    params["sign"] = generate_sign(params, app_secret)
    response = requests.get(url, params=params)
    return response.json()

# 示例调用
keyword = "手机"
result = get_search_results(app_key, app_secret, keyword)
if result.get("items"):
    items = result["items"]
    num_iids = [item["num_iid"] for item in items]
    print("商品 ID 列表:", num_iids)
else:
    print("请求失败:", result.get("error_response", {}).get("msg"))

3.2 批量采集商品详情

获取到商品 ID 列表后,可以遍历每个 ID,调用 1688.item.get 接口批量采集商品详情数据。

def batch_get_taobao_items(app_key, app_secret, num_iids):
    items = []
    for num_iid in num_iids:
        item = get_taobao_item(app_key, app_secret, num_iid)
        if item.get("item"):
            items.append(item["item"])
        time.sleep(1)  # 控制请求频率
    return items

# 示例调用
num_iids = ["123456789", "987654321"]  # 示例商品 ID 列表
items = batch_get_taobao_items(app_key, app_secret, num_iids)

# 打印结果
for item in items:
    print(f"商品标题: {item['title']}")
    print(f"商品价格: {item['price']}")
    print(f"商品图片: {item['pic_url']}")
    print(f"商品详情: {item['desc']}")
    print(f"SKU: {item.get('sku', 'N/A')}")
    print("-" * 30)

四、数据存储与导出

4.1 存储为 CSV 文件

采集到的商品详情数据可以存储为 CSV 文件,方便后续分析。

import pandas as pd

def save_to_csv(items, filename="taobao_items.csv"):
    df = pd.DataFrame(items)
    df.to_csv(filename, index=False, encoding="utf-8-sig")
    print(f"数据已保存到 {filename}")

# 示例调用
save_to_csv(items)

五、注意事项

  1. 遵守法律法规:在采集数据时,务必遵守相关法律法规,尊重 1688 的数据使用政策。

  2. 合理控制请求频率:避免过高的请求频率导致服务器过载或 IP 被封。建议在请求之间加入适当的延时。

  3. 处理反爬虫机制:1688 可能有反爬虫机制,如验证码等。可以尝试使用代理 IP 或模拟正常用户行为。

  4. API 调用限制:1688 API 的调用次数有限制,可能需要购买相应的调用套餐。

六、总结

通过上述步骤,我们可以使用 Python 和 1688 开放平台的 API 实现 1688 商品详情数据的批量采集。API 提供了丰富的商品信息,包括标题、价格、图片、SKU、详情描述等。在实际应用中,建议根据需求选择合适的 API 接口,并合理处理返回值。希望本文能帮助你快速掌握 1688 商品详情数据的采集方法。

如果你在实现过程中遇到任何问题,欢迎在评论区交流讨论!

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐