我有大量重定向到不同URL的URL列表。 我正在从列表中提供它们,并尝试打印重定向的URL
第一个重定向的 URL 打印正常。 但是从第二个开始 - 请求只是停止给我重定向的 URL,而只是打印给定的 URL
我尝试使用urllib
、urllib2
和mechanize
来实现。
他们给第一个重定向的 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 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)