一、方案概述
本文提供两种爬取天猫商品数据的技术方案:
- 官方API方案:合法合规,需企业资质,推荐长期稳定使用
- 非官方接口方案:适合快速验证需求,需技术对抗反爬机制
二、官方API方案详解
1. 天猫开放平台接口
- 适用场景:企业级数据采集需求
- 接口优势:
- 数据完整度高(含商品详情、价格、评论等)
- 官方维护,稳定性强
- 支持分页和批量查询
开发步骤:
- 注册开发者账号:open.taobao.com
- 申请接口权限:
taobao.item.get
:商品详情taobao.items.search
:商品搜索
- 安装SDK:
pip install alibabacloud-python-sdk-core
- 签名请求示例:
from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_tbk_dg import models as tbk_dg_models from alibabacloud_tbk_dg.client import Client config = open_api_models.Config( app_key="your_app_key", app_secret="your_app_secret", region_id="cn-hangzhou" ) client = Client(config) request = tbk_dg_models.TbkItemInfoGetRequest( num_iid=654321 # 商品ID ) response = client.tbk_item_info_get(request) print(response.body)
三、非官方接口实战
1. 接口逆向分析
核心API:
GET https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/
参数构造:
{ "itemNumId": "654321", "isForbidBuyItem": false, "isForbidPromotion": false, "sellerId": "123456" }
关键参数说明:
参数名 |
作用 |
生成方式 |
|
签名验证 |
JS逆向生成(需解密) |
|
时间戳 |
当前时间戳(秒级) |
|
浏览器指纹 |
随机生成(如iOS/Android) |
2. Python实现示例
import requests import execjs # JS解密逻辑(需根据实际逆向代码调整) with open('sign.js', 'r') as f: sign_js = f.read() ctx = execjs.compile(sign_js) sign = ctx.call('generate_sign', params) headers = { 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1', 'Cookie': 't=your_cookie; cna=xxx;' } url = f'https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?sign={sign}&data={data}' response = requests.get(url, headers=headers) print(response.json())
四、反反爬策略
1. 动态参数对抗
- sign参数:定期更新解密逻辑
- t参数:每次请求生成新时间戳
- User-Agent:使用
fake_useragent
轮换
2. 代理池方案
from requests_rotating_proxy import RotatingProxyManager proxy_manager = RotatingProxyManager([ 'http://user:pass@proxy1.com:8080', 'http://user:pass@proxy2.com:8080' ]) response = requests.get(url, proxies=proxy_manager.get_proxy())
3. 行为模拟
import time import random # 随机延迟(0.5-2秒) time.sleep(random.uniform(0.5, 2.0)) # 模拟真实用户行为 # 可结合selenium/playwright添加鼠标移动、点击等操作
五、数据解析与存储
1. 核心字段提取
data = response.json() item_info = { '商品ID': data['itemNumId'], '标题': data['title'], '价格': data['price']['viewPrice'], '销量': data['soldQuantity'], '评论数': data['reviewCount'] }
2. 存储方案
- 结构化存储:MySQL/PostgreSQL
- 分布式存储:HBase/Elasticsearch
- 临时缓存:Redis(存储已爬取商品ID)
六、注意事项
- 法律合规:
- 遵守《电子商务法》第24条用户信息保护规定
- 避免爬取用户隐私数据(如收货地址)
- 反爬对抗:
- 定期更新JS解密逻辑
- 使用分布式高匿代理(推荐Bright Data)
- 性能优化:
- 异步请求(aiohttp+asyncio)
- 结果缓存(Redis LRU策略)
七、扩展应用场景
- 商品比价监控:定时获取价格波动数据
- 竞品分析:监控同类商品销量、评价
- 库存预警:监听
stockQuantity
字段变化 - 评论情感分析:结合NLP处理用户评价
八、推荐工具链
工具类型 |
推荐工具 |
浏览器自动化 |
Playwright(首选)、Selenium |
请求库 |
aiohttp(异步)、httpx(HTTP/2) |
数据解析 |
lxml(XPath)、BeautifulSoup |
JS逆向 |
Charles + Jadx + PyExecJS |
代理池 |
Bright Data、Oxylabs |
如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。