当我使用python请求检查一个站点时,如果该站点将我重定向到另一个页面,我会知道吗?

当我使用python请求检查一个站点时,如果该站点将我重定向到另一个页面,我会知道吗?,python,httplib,python-requests,Python,Httplib,Python Requests,我的意思是,如果我去“www.yahoo.com/thispage”,雅虎设置了一个过滤器,将/thispage重定向到/thatpage。因此,每当有人进入/这个页面时,他/她都会在/那个页面上着陆 如果我使用httplib/requests/urllib,它会知道有重定向吗?什么错误页面? 当无法找到页面时,某些站点会将用户重定向到/errorpage。通过请求,您可以在响应对象的.history属性中获得任何重定向的列表。它返回一个Python列表。有关更多信息,请参阅。这取决于他们执行重

我的意思是,如果我去“www.yahoo.com/thispage”,雅虎设置了一个过滤器,将/thispage重定向到/thatpage。因此,每当有人进入/这个页面时,他/她都会在/那个页面上着陆

如果我使用httplib/requests/urllib,它会知道有重定向吗?什么错误页面?
当无法找到页面时,某些站点会将用户重定向到/errorpage。

通过
请求
,您可以在响应对象的
.history
属性中获得任何重定向的列表。它返回一个Python列表。有关更多信息,请参阅。

这取决于他们执行重定向的方式。“正确”的方法是返回重定向的HTTP状态代码(301/302/303)。“错误”的方法是在HTML中放置一个刷新元标记


如果他们执行前者,
请求
将透明地处理它。请注意,任何sane error page redirect(正常错误页面重定向)仍将有一个错误状态代码(例如404),您可以将其作为
响应进行检查。状态代码

要防止来自以下重定向的请求,请使用:

r=requests.get('http://www.yahoo.com/thispage,允许重定向(错误)


如果确实是重定向,您可以在r.headers['location']中检查重定向目标位置。

接受的答案是正确的第一个选项,但在某些情况下,如果站点使用元标记重定向,则在重定向后还会指定规范链接。在本例中,让我尝试从wikipedia请求,这是一个重定向的url

>> request = requests.get('http://en.wikipedia.org/wiki/Google_Inc_Class_A')
我检查并确认:

>> request.history
[]
另一种方法是尝试拉取规范的url,希望它能包含您被重定向到的内容。(注意,我在这里也使用BeautifulSoup)


在这种情况下,它与您重定向到的url不匹配。因此,要明确的是,这是一个丑陋的第二个选择,但如果所有其他选择都失败了,那么值得尝试。

您试图解决的问题是什么?你的代码怎么做得不对?如果你只是想知道错误模式,你可以自己测试这种行为。检查@Marcin我有一个庞大的URL列表(1k+)来测试它们是否正常。我随机选择了其中的40-50个进行手动测试,我发现当找不到某个页面时,有些页面会被重定向到错误页面。此外,我还看到许多url被重定向,因为url模式已更改,相同的名称只是写得不同而已。@其中一个看起来像我需要的,我会检查它。谢谢对于未来的读者:我刚刚检查了这个示例,并且正确填充了历史记录:
requests.get('http://en.wikipedia.org/wiki/Google_Inc_Class_A,允许重定向)
。我不知道这是由于“allow_redirects”参数还是由于新版本的请求包。顺便说一句,该文档链接已更新:
>> soup = BeautifulSoup(request._content)
>> canonical = soup.find('link', {'rel': 'canonical'})
>> canonical['href']
'http://en.wikipedia.org/wiki/Google'