无法在 Python 中获取重定向的 URL.尝试使用请求,urllib,urllib2和机械化



我有大量重定向到不同URL的URL列表。 我正在从列表中提供它们,并尝试打印重定向的URL

第一个重定向的 URL 打印正常。 但是从第二个开始 - 请求只是停止给我重定向的 URL,而只是打印给定的 URL

我尝试使用urlliburllib2mechanize来实现。

他们给第一个重定向的 url 罚款,然后在第二个 url 上抛出错误并停止。

谁能让我知道为什么会这样?

下面是伪代码/实现:

for given_url in url_list:
print ("Given URL: " + given_url)
s = requests.Session()
r = requests.get(given_url, allow_redirects=True)
redirected_url = r.url
print ("Redirected URL: " + redirected_url)

输出:

Given URL: www.xyz.com 
Redirected URL: www.123456789.com 
Given URL: www.abc.com 
Redirected URL: www.abc.com 
Given URL: www.pqr.com 
Redirected URL: www.pqr.com 

尝试 HEAD 请求,它不会遵循重定向或下载整个正文:

r = requests.head('http://www.google.com/')
print r.headers['Location']

您提供的代码片段没有错,但正如您在评论中提到的,您得到了HTTP 400401的响应。HTTP 401表示Unauthorized,这意味着该网站正在阻止您。HTTP 400的意思是Bad Request这通常意味着该网站不理解您的请求,但当您被阻止时也可以返回它,我怀疑

情况也是如此。当我为 ABC 网站运行您的代码时,我会被正确重定向,这让我相信他们正在阻止您的 IP 地址在短时间内发送太多请求和/或没有设置User-Agent

由于您提到您可以在浏览器中正确打开链接,因此您可以尝试将User-Agent字符串设置为与浏览器的字符串匹配,但这不能保证有效,因为它是站点可能用来检测您是否是机器人的众多参数之一。

例如:

headers = {'User-agent': 'Mozilla/5.0'}
r = requests.get(url, headers=headers)

最新更新