全部
常见问题
产品动态
精选推荐
功能建议

分析中 已回复 待规划 {{opt.name}}
分析中 已回复 待规划
淘宝关键词接口 item_search 批量获取商品信息实战指南

管理 管理 编辑 删除

一、整体流程一览


步骤动作耗时
① 注册认证淘宝开放平台 → 实名认证1-3个工作日
② 创建应用获取 App Key / App Secret即时
③ 申请权限申请 taobao.items.search 等接口1-2个工作日
④ 调接口签名 → 请求 → 解析 → 存储按需


二、接口选择


接口适用场景核心字段频率限制
taobao.items.search关键词搜商品、竞品监控num_iid, title, price, pic_url, volume免费500次/天,企业10万次/天
taobao.tbk.item.get淘宝客推广、查优惠券/佣金zk_final_price(折后价), tk_rate(佣金), coupon_info约5000次/天
taobao.item.search_shop按店铺拉全量商品同上 + shop_id同上
本文主力演示 taobao.items.search(关键词搜索)。


三、签名机制(最核心,错了必报错)

淘宝 API 采用 MD5 签名,规则如下:

签名串 = AppSecret + 按ASCII升序拼接(key1value1key2value2...) + AppSecret
sign = MD5(签名串).toUpperCase()

签名步骤拆解

  1. 收集所有参数(排除 sign 本身
  2. 按参数名 ASCII 码升序排序
  3. 拼接为 key1value1key2value2...(无分隔符)
  4. 首尾各追加 AppSecret
  5. MD5 加密 → 转大写
pythonimport hashlib

def generate_sign(params: dict, app_secret: str) -> str:
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    param_str = app_secret + ''.join(f"{k}{v}" for k, v in sorted_params if k != 'sign') + app_secret
    return hashlib.md5(param_str.encode('utf-8')).hexdigest().upper()


四、完整 Python 实战代码

pythonimport requests
import hashlib
import time
from datetime import datetime

class TaobaoAPI:
    def __init__(self, app_key: str, app_secret: str):
        self.app_key = app_key
        self.app_secret = app_secret
        self.base_url = "https://gw.api.taobao.com/router/rest"

    def generate_sign(self, params: dict) -> str:
        sorted_params = sorted(params.items(), key=lambda x: x[0])
        param_str = self.app_secret + ''.join(
            f"{k}{v}" for k, v in sorted_params if k != 'sign'
        ) + self.app_secret
        return hashlib.md5(param_str.encode('utf-8')).hexdigest().upper()

    def search_items(self, keyword: str, page_no: int = 1, page_size: int = 50,
                     fields: str = None) -> dict:
        """单页搜索"""
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        params = {
            "app_key": self.app_key,
            "method": "taobao.items.search",
            "timestamp": timestamp,
            "format": "json",
            "v": "2.0",
            "sign_method": "md5",
            "q": keyword,
            "page_no": str(page_no),
            "page_size": str(page_size),
        }
        if fields:
            params["fields"] = fields  # 如: num_iid,title,pict_url,price,volume
        params["sign"] = self.generate_sign(params)

        response = requests.get(self.base_url, params=params, timeout=10)
        return response.json()

    def batch_fetch(self, keyword: str, max_pages: int = 10, page_size: int = 50) -> list:
        """批量多页获取"""
        all_items = []
        for page in range(1, max_pages + 1):
            print(f"🔍 第 {page} 页...")
            result = self.search_items(keyword, page_no=page, page_size=page_size)

            # 错误处理
            if result.get("error_response"):
                print(f"❌ {result['error_response']['sub_msg']}")
                break

            items = result.get("items_search_response", {}) \
                        .get("items", {}) \
                        .get("item", [])
            if not items:
                print(f"✅ 第 {page} 页无数据,停止")
                break

            all_items.extend(items)
            time.sleep(1)  # 防限流

        return all_items


# ========== 调用示例 ==========
if __name__ == "__main__":
    APP_KEY = "YOUR_APP_KEY"
    APP_SECRET = "YOUR_APP_SECRET"

    api = TaobaoAPI(APP_KEY, APP_SECRET)
    data = api.batch_fetch(keyword="手机", max_pages=5, page_size=50)

    print(f"共获取 {len(data)} 条商品")
    for item in data[:3]:
        print(f"  {item.get('title')} | ¥{item.get('price')} | 销量{item.get('volume')}")


五、关键参数说明


参数必填说明示例
q搜索关键词手机
page_no页码,默认11
page_size每页数量,默认20,最大10050
fields返回字段,减少传输量num_iid,title,price,pict_url,volume
sort排序:sale-desc(销量降) / price_asc(价格升)sale-desc
start_price / end_price价格区间0 / 1000
cat类目ID50012025(女装)

总页数计算total_pages = ceil(total_results / page_size),从首页响应的 total_results 字段获取。



六、响应数据结构

json{
  "items_search_response": {
    "total_results": "5428",
    "items": {
      "page": "1",
      "real_total_results": "5428",
      "page_size": 48,
      "item": [
        {
          "num_iid": "123456789",
          "title": "商品标题...",
          "pict_url": "https://img.alicdn.com/...",
          "price": "199.00",
          "volume": "3000+",
          "nick": "店铺名",
          "seller_id": "898146183"
        }
      ]
    }
  }
}


七、性能优化与避坑


问题解决方案
限流 403time.sleep(1) 控制间隔,企业认证可到10万次/天
签名错误检查参数是否按 ASCII 升序、是否排除了 sign 字段、时间戳是否在 ±5 分钟内
数据延迟销量/价格有约3分钟延迟,需搭配消息订阅或定时全量同步
高频调用封禁单应用每分钟不超过60次,建议用 Redis 缓存 + 异步框架(asyncio/Scrapy)
AppSecret 泄露切勿硬编码在前端,服务端签名后再返回数据


八、数据存储建议

pythonimport pandas as pd

# 导出 CSV
df = pd.DataFrame(data)
df.to_csv("taobao_items.csv", index=False, encoding="utf-8-sig")

# 或存 MySQL
# INSERT INTO products (num_iid, title, price, volume, pic_url) VALUES (...)
# ON DUPLICATE KEY UPDATE price=VALUES(price), volume=VALUES(volume)


九、合规红线

  • ✅ 走官方 API,合法合规
  • ❌ 禁止爬取用户隐私(手机号、地址)
  • ❌ 禁止直接展示价格做比价(需通过淘宝客链接跳转)
  • 遵守《淘宝开放平台规则》及《个人信息保护法》


一句话总结: 注册拿密钥 → MD5签名 → 循环分页 → 控速防封 → 存库分析。整个链路跑通后,批量拉取万级商品数据只是几分钟的事。

{{voteData.voteSum}} 人已参与
支持
反对
请登录后查看

c2685e9e6ef0 最后编辑于2026-06-24 15:08:33

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}} 【已收集】
{{item.floor}}# 沙发 板凳 地板 {{item.floor}}# 【已收集】
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
分享
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
收起 展开更多
查看更多
打赏
已打赏¥{{reward_price}}
14
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服
CRMEB咨询热线 400-8888-794

扫码领取产品资料

功能清单
思维导图
安装教程
CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服