Python中如何使用requests获取淘宝链接跳转后的真实地址?
链接地址如
https://s.click.taobao.com/WRoeUkw
跳转成功的 URL 是
https://item.taobao.com/item.htm?id=548674077854&ali_trackid=2:mm_16389311_20848374_70766594:1496849954_2k8_1774242087&pvid=19_183.204.96.103_711_1495772079051
请问,如果用 requests 或者是 pyspider 得到后面的地址,最好有分析思路.
学习爬虫小白,感谢指导。
Python中如何使用requests获取淘宝链接跳转后的真实地址?
4 回复
import requests
def get_final_url(taobao_url):
"""
获取淘宝链接跳转后的最终真实地址
"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Accept-Encoding': 'gzip, deflate',
'DNT': '1',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
}
try:
# 禁用自动重定向,手动处理跳转
response = requests.get(taobao_url,
headers=headers,
allow_redirects=False,
timeout=10)
# 检查状态码
if response.status_code in [301, 302, 303, 307, 308]:
# 获取重定向地址
redirect_url = response.headers.get('Location')
if redirect_url:
return redirect_url
else:
return "未找到重定向地址"
elif response.status_code == 200:
# 如果没有重定向,返回原链接
return taobao_url
else:
return f"请求失败,状态码: {response.status_code}"
except requests.exceptions.RequestException as e:
return f"请求出错: {str(e)}"
# 使用示例
if __name__ == "__main__":
# 淘宝短链接示例
test_urls = [
"https://m.tb.cn/h.gn12345", # 淘宝短链接
"https://item.taobao.com/item.htm?id=123456789", # 普通商品链接
]
for url in test_urls:
final_url = get_final_url(url)
print(f"原始链接: {url}")
print(f"最终地址: {final_url}")
print("-" * 50)
这个代码的核心是设置allow_redirects=False来禁用requests的自动重定向,然后手动检查响应头中的Location字段获取跳转地址。淘宝链接通常会有多层跳转(比如从短链接到商品页),这种方法能获取到最终的落地页地址。
注意淘宝可能会检测爬虫行为,如果遇到反爬,可以尝试添加更多请求头参数或使用会话保持。
简单说就是关掉自动跳转,自己从响应头里拿Location。
requests.get(url).url 就是跳转的地址了。
二楼正解


