一、接口概述
淘宝/天猫关键词搜索接口是平台开放的核心API之一,允许开发者通过关键词检索平台商品,适用于比价工具、选品系统、市场分析等多种场景。
二、主要搜索接口对比
1. 淘宝客API(适合联盟推广)
- 接口名称:taobao.tbk.item.get / taobao.tbk.dg.material.optional
- 特点:返回带佣金商品,适合推广场景
- 权限要求:淘宝客开发者权限
2. 平台商品搜索API(需高级权限)
- 接口名称:taobao.item.search / tmall.item.search
- 特点:返回原始商品数据,信息更全面
- 权限要求:高级API权限,需申请
3. 店铺内搜索API
- 接口名称:taobao.items.search / tmall.items.search
- 特点:限定特定店铺内搜索
- 权限要求:需店铺授权
三、核心接口:taobao.tbk.dg.material.optional(淘宝客物料搜索)
请求参数详解
| 参数 | 类型 | 必选 | 说明 |
|---|---|---|---|
| q | String | 否 | 关键词 |
| cat | String | 否 | 类目ID,多个用逗号分隔 |
| itemloc | String | 否 | 发货地 |
| sort | String | 否 | 排序:"tk_rate_des"(佣金比率降序)等 |
| is_tmall | Boolean | 否 | 是否只取天猫商品 |
| is_overseas | Boolean | 否 | 是否海外商品 |
| start_price | Number | 否 | 价格下限(元) |
| end_price | Number | 否 | 价格上限(元) |
| page_no | Number | 否 | 页码 |
| page_size | Number | 否 | 页大小(1~100) |
| platform | Number | 否 | 链接形式:1-PC,2-无线 |
| has_coupon | Boolean | 否 | 是否有优惠券 |
| adzone_id | Number | 是 | 推广位ID |
| need_free_shipment | Boolean | 否 | 是否包邮 |
| need_prepay | Boolean | 否 | 是否加入消费者保障 |
排序参数选项
tk_rate_des:佣金比率降序tk_rate_asc:佣金比率升序tk_total_sales_des:总销量降序tk_total_sales_asc:总销量升序tk_price_des:价格降序tk_price_asc:价格升序
四、高级搜索技巧
1. 精准匹配搜索
python
复制
下载
req.q = '"exact keyword"' # 使用双引号包裹关键词
2. 排除关键词
python
复制
下载
req.q = "手机 -二手" # 减号表示排除
3. 多条件组合
python
复制
下载
req.q = "女装 夏季"
req.cat = "16,18" # 女装/女士精品类目
req.itemloc = "浙江"
req.start_price = "100"
req.end_price = "500"
req.has_coupon = "true"
4. 类目精准筛选
python
复制
下载
# 获取类目ID列表
req.cat = "50010788,50008900" # 连衣裙和T恤类目
五、Python完整调用示例
python
复制
下载
from top.api import TbkDgMaterialOptionalRequest
from top import appinfo
import json
def search_taobao_items(keyword, adzone_id, page=1, page_size=20):
req = TbkDgMaterialOptionalRequest()
req.set_app_info(appinfo("your_app_key", "your_app_secret"))
# 基础参数
req.adzone_id = adzone_id
req.page_size = page_size
req.page_no = page
req.platform = 2 # 无线端
# 搜索条件
req.q = keyword
req.sort = "tk_rate_des" # 按佣金降序
req.has_coupon = True # 只显示有优惠券商品
# 高级筛选
req.start_price = "100"
req.end_price = "500"
req.is_tmall = True # 只显示天猫商品
try:
resp = req.getResponse()
return resp.get('tbk_dg_material_optional_response', {}).get('result_list', {}).get('map_data', [])
except Exception as e:
print(f"搜索出错: {str(e)}")
return []
# 使用示例
results = search_taobao_items("夏季连衣裙", "your_adzone_id")
print(json.dumps(results, indent=2, ensure_ascii=False))
六、返回数据结构解析
典型返回数据示例:
json
复制
下载
{
"tbk_dg_material_optional_response": {
"result_list": {
"map_data": [
{
"item_id": "123456789",
"title": "2023新款夏季连衣裙",
"pict_url": "https://img.alicdn.com/xxx.jpg",
"small_images": {
"string": ["https://img.alicdn.com/xxx1.jpg", "..."]
},
"reserve_price": "299.00",
"zk_final_price": "199.00",
"commission_rate": "15.00",
"coupon_info": "满199减50",
"coupon_remain_count": 1000,
"coupon_total_count": 5000,
"volume": 5000,
"shop_title": "品牌旗舰店",
"user_type": 1,
"provcity": "浙江 杭州",
"item_url": "https://detail.tmall.com/item.htm?id=123456789",
"coupon_share_url": "https://taoquan.taobao.com/xxx",
"shop_dsr": 48927,
"white_image": "https://img.alicdn.com/xxx.jpg"
}
]
},
"total_results": 1000,
"request_id": "abc123xyz456"
}
}
关键字段说明:
zk_final_price:折后价commission_rate:佣金比率(%)coupon_info:优惠券信息volume:30天销量user_type:1-天猫,0-淘宝shop_dsr:店铺DSR评分(分值*10000)
七、高级应用场景
1. 价格监控系统
python
复制
下载
# 监控特定商品价格变化
def monitor_price(item_id):
req = TbkDgMaterialOptionalRequest()
req.set_app_info(appinfo(app_key, app_secret))
req.adzone_id = adzone_id
req.q = f"nid:{item_id}" # 按商品ID精确搜索
try:
resp = req.getResponse()
item = resp['tbk_dg_material_optional_response']['result_list']['map_data'][0]
return {
'price': float(item['zk_final_price']),
'coupon': item.get('coupon_info', '')
}
except:
return None
2. 竞品分析工具
python
复制
下载
# 获取竞品列表并分析
def analyze_competitors(keyword, top_n=10):
items = search_taobao_items(keyword, adzone_id, 1, top_n)
analysis = {
'avg_price': 0,
'max_sales': 0,
'tmall_ratio': 0,
'coupon_ratio': 0
}
if not items:
return analysis
total_price = 0
tmall_count = 0
coupon_count = 0
for item in items:
total_price += float(item['zk_final_price'])
analysis['max_sales'] = max(analysis['max_sales'], item.get('volume', 0))
if item.get('user_type') == 1:
tmall_count += 1
if item.get('coupon_info'):
coupon_count += 1
analysis['avg_price'] = round(total_price / len(items), 2)
analysis['tmall_ratio'] = round(tmall_count / len(items) * 100, 2)
analysis['coupon_ratio'] = round(coupon_count / len(items) * 100, 2)
return analysis
八、性能优化建议
-
分页策略:
- 避免深度分页(超过100页)
- 使用
page_size最大化(100条/页)
-
缓存机制:
python
复制
下载
from cachetools import TTLCache # 创建TTL缓存(5分钟过期) search_cache = TTLCache(maxsize=1000, ttl=300) def cached_search(keyword, adzone_id): cache_key = f"{keyword}_{adzone_id}" if cache_key in search_cache: return search_cache[cache_key] result = search_taobao_items(keyword, adzone_id) search_cache[cache_key] = result return result -
异常处理:
python
复制
下载
def safe_search(keyword, retry=3): for i in range(retry): try: return search_taobao_items(keyword) except Exception as e: if i == retry - 1: raise time.sleep(2 ** i) # 指数退避
九、合规注意事项
-
展示规范:
- 必须显示"淘宝客"标识
- 优惠券信息需完整展示
-
数据使用限制:
- 不得存储原始商品数据超过24小时
- 不得用于价格对比外的其他商业用途
-
频率限制:
- 默认QPS限制:20次/秒
- 每日调用上限:通常50万次/天
-
用户隐私:
- 不得收集用户个人信息
- 跳转链接必须使用官方提供的URL
如需最新信息,请参考[万邦开放平台官方文档]