我有很多短网址,我想扩展它们。我在网上某处(我错过了源代码)发现以下代码:
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):最多重试 网址超出: /提示/杀害了跑步机锻炼字到TIMMY-GACQUIN.ASP(导致 通过NewConnectionError(':无法建立新的连接:[Errno 11004] getaddrinfo失败',))
我尝试了许多解决方案,例如此处的设置:Max retries exceeded with URL in requests,但没有任何效果。
我在考虑另一种解决方案,即在请求中传递用户代理,每次我随机更改它(使用大量用户代理)时:
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 总是返回短网址,而不是长网址(扩展网址)。
我想念什么?
答案 0 :(得分:1)
您可以通过向allow_redirects=False
方法中添加requests.get()
来防止错误,以防止重定向到不存在的页面(从而引发错误)。您必须检查服务器自己发送的标头(将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