使用请求库扩展 python 中的短网址

Expand short urls in python using requests library

我有大量的短网址,我想扩展它们。我在网上某处(我错过了源代码)找到了以下代码:

short_url = "t.co/NHBbLlfCaa"
r = requests.get(short_url)
if r.status_code == 200:
    print("Actual url:%s" % r.url)

效果很好。但是当我多次 ping 同一个服务器时出现这个错误:

urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='www.fatlossadvice.pw', port=80): Max retries exceeded with url: /TIPS/KILLED-THAT-TREADMILL-WORKOUT-WORD-TO-TIMMY-GACQUIN.ASP (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 11004] getaddrinfo failed',))

我尝试了很多解决方案,例如此处的设置:Max retries exceeded with URL in requests,但没有任何效果。

我在想另外一个方案,就是在request中传一个useragent,每次都是随机改的(使用大量useragent):

user_agent_list = [
        'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0',
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0',
        'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0',
        'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36',
    ]

r = requests.get(short_url, headers={'User-Agent': user_agent_list[np.random.randint(0, len(user_agent_list))]})
if r.status_code == 200:
    print("Actual url:%s" % r.url)

我的问题是 r.url 总是 return 短的 url 而不是长的 url。

我错过了什么?

您可以通过将 allow_redirects=False 添加到 requests.get() 方法来防止错误,以防止重定向到不存在的页面(从而引发错误)。你必须自己检查服务器发送的header(将XXXX替换为https,删除空格):

import requests

short_url = ["XXXX t.co /namDL4YHYu",
 'XXXX t.co /MjvmV',
 'XXXX t.co /JSjtxfaxRJ',
 'XXXX t.co /xxGSANSE8K',
 'XXXX t.co /ZRhf5gWNQg']

for url in short_url:
    r = requests.get(url, allow_redirects=False)
    try:
        print(url, r.headers['location'])
    except KeyError:
        print(url, "Page doesn't exist!")

打印:

XXXX t.co/namDL4YHYu http://gottimechillinaround.tumblr.com/post/133931725110/tip-672
XXXX t.co/MjvmV Page doesn't exist!
XXXX t.co/JSjtxfaxRJ http://www.youtube.com/watch?v=rE693eNyyss
XXXX t.co/xxGSANSE8K http://www.losefattips.pw/Tips/My-stretch-before-and-after-my-workout-is-just-as-important-to-me-as-my-workout.asp
XXXX .co/ZRhf5gWNQg http://www.youtube.com/watch?v=3OK1P9GzDPM