我有一个庞大的网址列表,可以重定向到不同的网址。 我从列表中提供for循环,并尝试打印重定向的URL
第一个重定向的网址打印正常。 但是从第二个请求 - 请求只是停止给我重定向的URL,只打印给定的URL
我尝试使用urllib
,urllib2
和mechanize
进行实施。
他们将第一个重定向的网址设为罚款,然后在第二个重新定向网址时抛出错误并停止。
任何人都可以告诉我为什么会这样吗?
以下是伪代码/实现:
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
答案 0 :(得分:1)
尝试HEAD请求,它不会遵循重定向或下载整个正文:
r = requests.head('http://www.google.com/')
print r.headers['Location']
答案 1 :(得分:0)
您提供的代码段没有任何问题,但正如您在评论中提到的那样,您会收到HTTP 400
和401
个回复。 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)