淘宝实时拍立淘按图搜索数据|商品详情|数据分析提取教程
淘宝的 “拍立淘” 功能(按图搜索)依赖平台内部接口,其数据未开放开放官方 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 BytesIOclass 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 requestsdef 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 pltdef analyze_data(json_data):"""分析相似商品价格、销量分布"""items = json_data.get("result", {}).get("items", [])if not items:print("无数据可分析")return# 转为DataFramedf = 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 开放计划,优先选择官方合规路径。
