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 回复



做了几次重定向而已,检测到状态码是 302 就把 location 参数提取出来作为新的请求链接


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 就是跳转的地址了。

二楼正解

回到顶部