无法在Python中获取重定向的URL。尝试使用请求,urllib,urllib2和mechanize

时间:2017-07-24 02:23:36

标签: python python-requests urllib2 mechanize urllib

我有一个庞大的网址列表,可以重定向到不同的网址。 我从列表中提供for循环,并尝试打印重定向的URL

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

我尝试使用urlliburllib2mechanize进行实施。

他们将第一个重定向的网址设为罚款,然后在第二个重新定向网址时抛出错误并停止。

任何人都可以告诉我为什么会这样吗?

以下是伪代码/实现:

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 

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您提供的代码段没有任何问题,但正如您在评论中提到的那样,您会收到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)