Python淘宝订单数据获取失败:为何携带Cookie和URL参数仍跳转登录页?
很多开发者尝试用Python抓取淘宝订单数据时,即便提前准备了登录后的Cookie、拼好了完整的URL参数,程序还是会被重定向到登录页面,根本拿不到想要的数据。这个问题看似是参数或Cookie的问题,实则和淘宝的反爬机制、请求头的完整性、Cookie的有效性都有关系。
问题场景还原
我们先看一段典型的错误请求代码,很多新手都会写出类似的逻辑:
import requests
# 从浏览器复制的Cookie
cookie_str = "t=xxx; cookie2=xxx; _tb_token_=xxx; other_key=xxx"
# 拼好的订单列表URL,包含时间范围、订单状态等参数
url = "https://trade.taobao.com/trade/itemlist/list_sold_items.htm?spm=a21bo.jianhua.201867.6.5af911d9qNtC1v&status=4&start_date=2024-01-01&end_date=2024-01-31"
headers = {
"Cookie": cookie_str
}
response = requests.get(url, headers=headers)
print(response.url)
print(response.text[:500])运行这段代码后,你会发现打印的response.url变成了淘宝的登录页地址,返回的文本内容也是登录页面的HTML,完全不是订单列表数据。明明已经带了Cookie和参数,为什么还会跳转登录页?
核心原因分析
1. 请求头不完整,被识别为非浏览器请求
淘宝的反爬系统会校验请求头的完整性,仅携带Cookie的请求很容易被判定为爬虫请求。正常浏览器发送请求时,会携带User-Agent、Referer、Accept、Accept-Language等字段,缺失这些字段会直接触发反爬拦截。
比如User-Agent字段用来标识客户端类型,如果你用的是默认的requests库的User-Agent,淘宝会立刻识别出这是脚本请求,直接重定向到登录页;Referer字段用来标识请求来源,订单列表页的正常请求来源应该是淘宝的个人中心页,直接请求订单URL没有正确的Referer也会被拦截。
2. Cookie有效性不足或已过期
很多开发者复制的Cookie只是浏览器请求头里的部分字段,缺少关键会话标识。淘宝的登录态依赖多个Cookie字段共同作用,比如_tb_token_、cookie2、t这些字段缺一不可,而且Cookie有有效期,长时间未登录的Cookie会失效。
另外要注意,Cookie是和域名绑定的,如果你用的Cookie是从www.taobao.com域名下复制的,但是请求的是trade.taobao.com域名下的接口,也可能因为域名不匹配导致Cookie无效。
3. 缺少动态参数或签名校验
淘宝的很多接口请求会携带动态生成的参数,比如_csrf_token_、sign这类字段,这些参数是前端通过JS动态生成的,每次请求都会变化,而且会和Cookie、时间戳等信息做签名校验。你手动拼的URL参数如果缺少这些动态字段,或者字段值过期,请求也会被拦截。
4. IP被限制或风控
如果你的请求频率过高,或者使用的服务器IP是公有云IP,很容易被淘宝的风控系统标记为异常IP,即便Cookie和请求头都正确,也会强制跳转登录页要求验证。
解决方案与正确示例
针对上面的问题,我们可以调整请求逻辑,提升请求的成功率:
第一步:补全完整的请求头
从浏览器中复制完整的请求头,包括User-Agent、Referer、Accept等字段,尽量模拟真实浏览器的请求特征。
第二步:确保Cookie有效且完整
登录淘宝后,在浏览器开发者工具的Network面板中找到订单列表的请求,复制完整的请求头Cookie字段,注意要和请求的域名匹配。
第三步:控制请求频率,必要时使用代理
降低请求频率,避免短时间内发送大量请求,如果是服务器环境请求,尽量使用家庭宽带代理IP,减少被风控的概率。
下面是调整后的示例代码:
import requests
# 完整的请求头,从浏览器真实请求中复制
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Referer": "https://www.taobao.com/",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Language": "zh-CN,zh;q=0.9",
"Accept-Encoding": "gzip, deflate, br",
"Cookie": "t=完整复制的t字段值; cookie2=完整复制的cookie2字段值; _tb_token_=完整复制的_tb_token_字段值; 其他必要字段=对应值"
}
# 订单列表接口URL,确保参数完整
url = "https://trade.taobao.com/trade/itemlist/list_sold_items.htm?status=4&start_date=2024-01-01&end_date=2024-01-31"
# 创建会话对象,保持Cookie状态
session = requests.Session()
response = session.get(url, headers=headers, allow_redirects=False)
# 判断是否被重定向
if response.status_code == 302:
print("请求被重定向,需要检查Cookie有效性或请求头完整性")
print("重定向地址:", response.headers.get("Location"))
else:
print("请求成功,返回内容长度:", len(response.text))
# 可以进一步解析返回的订单数据注意事项
- 淘宝的反爬机制会持续更新,上述方法仅能提升请求成功率,无法保证长期有效。
- 获取用户订单数据需要符合淘宝的开放平台规则,未经授权抓取用户数据可能涉及法律风险,建议优先使用淘宝开放平台提供的官方API接口。
- 如果测试时还是跳转登录页,可以检查Cookie是否过期,尝试重新登录后复制最新的Cookie再测试。
Python爬虫淘宝订单数据反爬机制请求头配置Cookie有效性 本作品最后修改时间:2026-05-23 22:32:27