淘宝的 "拍立淘" 功能(按图搜索)依赖平台内部接口,其数据未开放开放官方 API,且受严格反爬机制保护。以下是基于技术研究的拍立淘数据采集与分析提取教程 ,需特别注意:该操作仅用于个人学习研究,严禁商业用途或高频请求影响平台正常运行。
一、拍立淘核心原理与数据结构
拍立淘通过图像识别图像特征比对,返回相似商品列表,数据以 JSON 格式通过前端接口传输。核心信息包括:
- 商品基础信息:ID、标题、价格、销量、店铺名;
- 图像信息:商品主图 URL、相似度标识;
- 分页信息:总页数、当前页、每页商品数。
二、准备工作
1. 环境配置
# 安装必要库
pip install requests pillow python-multipart # 网络请求、图像处理、表单提交
pip install pandas # 数据分析
pip install beautifulsoup4 # 辅助解析(若需)
2. 工具准备
- 浏览器(Chrome/Firefox):用于抓包分析接口;
- 图片文件:准备待搜索的商品图片(如本地截图、商品照片)。
三、拍立淘接口分析(基于浏览器抓包)
1. 抓包步骤
- 打开淘宝首页,点击搜索框右侧的 "相机" 图标(拍立淘入口);
- 上传本地图片,触发搜索,同时按
F12打开开发者工具,进入「Network」面板; - 筛选「XHR」类型请求,找到包含
similar或search关键词的接口(如https://ai.taobao.com/search/image),记录其请求参数与响应格式。
2. 核心接口特征
- 请求方式 :
POST(需提交图片二进制数据); - 关键参数 :
image:图片二进制数据(表单提交,Content-Type: multipart/form-data);appCode:固定值(如taobao_shop_search);t:时间戳(防缓存);
- 响应格式 :JSON,包含商品列表(
result → items)。
四、Python 采集拍立淘数据(返回 JSON)
1. 核心代码(模拟图片上传与数据获取)
import requests
import time
import random
from PIL import Image
from io import BytesIO
class TaobaoImageSearch:
def __init__(self):
self.headers = {
"User-Agent": random.choice([
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/125.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) Firefox/126.0"
]),
"Referer": "https://www.taobao.com/",
"Origin": "https://www.taobao.com"
}
# 拍立淘接口(通过抓包获取,可能随平台更新变化)
self.search_url = "https://ai.taobao.com/search/image"
def _compress_image(self, image_path, max_size=(800, 800)):
"""压缩图片(避免过大导致上传失败)"""
with Image.open(image_path) as img:
img.thumbnail(max_size) # 按比例缩小
buffer = BytesIO()
img.save(buffer, format="JPEG") # 保存为JPEG格式
return buffer.getvalue()
def search_by_image(self, image_path, page=1):
"""
按图搜索商品
:param image_path: 本地图片路径
:param page: 页码(默认1)
:return: 商品列表JSON数据
"""
try:
# 1. 压缩图片
image_data = self._compress_image(image_path)
# 2. 构造表单数据(multipart/form-data)
files = {
"image": ("image.jpg", image_data, "image/jpeg") # 图片文件
}
data = {
"appCode": "taobao_shop_search",
"t": str(int(time.time() * 1000)), # 时间戳
"page": str(page),
"pageSize": "20" # 每页20条
}
# 3. 发送POST请求
response = requests.post(
url=self.search_url,
headers=self.headers,
data=data,
files=files,
timeout=15
)
response.raise_for_status()
# 4. 返回JSON数据
return response.json()
except Exception as e:
print(f"搜索失败:{str(e)}")
return None
# ------------------- 使用示例 -------------------
if __name__ == "__main__":
# 替换为你的图片路径(如"test.jpg")
IMAGE_PATH = "taobao_goods.jpg"
searcher = TaobaoImageSearch()
# 搜索第1页商品
result_json = searcher.search_by_image(IMAGE_PATH, page=1)
if result_json:
print("=== 拍立淘搜索结果(JSON) ===")
# 提取商品列表(具体路径需根据实际响应调整)
items = result_json.get("result", {}).get("items", [])
print(f"找到 {len(items)} 个相似商品:")
for idx, item in enumerate(items[:5], 1): # 打印前5个
print(f"\n第{idx}个商品:")
print(f"标题:{item.get('title')}")
print(f"价格:{item.get('price')} 元")
print(f"销量:{item.get('saleCount')} 件")
print(f"商品链接:https://item.taobao.com/item.htm?id={item.get('itemId')}")
五、商品详情数据提取(基于商品 ID)
通过拍立淘获取商品 ID 后,可进一步采集详情数据(参考前文淘宝评论采集逻辑,接口需重新抓包确认):
import requests
def get_product_detail(item_id):
"""获取商品详情(需抓包更新接口)"""
url = f"https://detail.tmall.com/item.htm?id={item_id}"
# 实际需调用详情页AJAX接口,此处为示例框架
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/125.0.0.0 Safari/537.36"
}
response = requests.get(url, headers=headers, timeout=10)
# 解析HTML或调用详情接口提取数据(如规格、参数、店铺信息)
return {"item_id": item_id, "status": "详情提取逻辑需补充"}
六、数据分析与可视化
使用pandas对采集的拍立淘数据进行分析:
import pandas as pd
import matplotlib.pyplot as plt
def analyze_data(json_data):
"""分析相似商品价格、销量分布"""
items = json_data.get("result", {}).get("items", [])
if not items:
print("无数据可分析")
return
# 转为DataFrame
df = pd.DataFrame(items)
# 筛选关键列
df = df[["title", "price", "saleCount", "shopName"]]
# 价格转为数值型
df["price"] = df["price"].astype(float)
# 1. 价格分布直方图
plt.figure(figsize=(10, 5))
plt.hist(df["price"], bins=10, color="skyblue")
plt.title("相似商品价格分布")
plt.xlabel("价格(元)")
plt.ylabel("商品数量")
plt.show()
# 2. 销量前5店铺
top_shops = df.groupby("shopName")["saleCount"].sum().nlargest(5)
plt.figure(figsize=(10, 5))
top_shops.plot(kind="bar", color="orange")
plt.title("销量前5店铺")
plt.xlabel("店铺名")
plt.ylabel("总销量")
plt.xticks(rotation=45)
plt.show()
# 调用分析函数
if result_json:
analyze_data(result_json)
七、关键注意事项(风险提示)
- 接口不稳定性:拍立淘接口为淘宝内部接口,URL 和参数可能随时变更,需定期抓包更新;
- 反爬限制 :
- 单 IP 单日请求不超过 50 次,每次请求间隔 3-5 秒;
- 频繁请求会导致
403 Forbidden或验证码,需使用代理 IP 池并轮换User-Agent;
- 合规性 :
- 严格遵守《淘宝平台服务协议》,不得将数据用于商业用途;
- 禁止采集用户隐私、侵权商品信息等敏感数据。
总结
拍立淘数据采集的核心是模拟图片上传请求→解析 JSON 响应→提取商品信息 ,需依赖抓包获取实时接口。通过pandas和matplotlib可实现价格分布、销量对比等基础分析,但需时刻注意接口稳定性与合规风险。
若需长期使用,建议关注淘宝开放平台是否有相关 API 开放计划,优先选择官方合规路径。