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

时间:2012-11-20 21:47:45

标签: python httplib python-requests

我的意思是,如果我访问“www.yahoo.com/thispage”,雅虎已设置过滤器将/ thispage重定向到/ thatpage。因此,每当有人访问/ thispage时,他/她将登陆/该页面。

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

4 个答案:

答案 0 :(得分:16)

使用requests,您可以获得响应对象的.history属性中任何重定向的列表。它返回一个Python列表。有关详情,请参阅documentation

答案 1 :(得分:10)

要防止请求重定向,请使用:

r = requests.get('http://www.yahoo.com/thispage', allow_redirects=False)

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

答案 2 :(得分:2)

接受的答案是正确的第一个选项,但在某些情况下,如果网站使用元标记重定向,则一旦重定向,它们也会指定规范链接。在此示例中,让我尝试从维基百科请求http://en.wikipedia.org/wiki/Google_Inc_Class_A,这是一个重定向的网址。

>> request = requests.get('http://en.wikipedia.org/wiki/Google_Inc_Class_A')

我检查并且:

>> request.history
[]

另一种方法是尝试拉出规范网址,该网址应该包含您已被重定向到的内容。 (注意我也在这里使用BeautifulSoup)

>> soup = BeautifulSoup(request._content)
>> canonical = soup.find('link', {'rel': 'canonical'})
>> canonical['href']
'http://en.wikipedia.org/wiki/Google'

哪个匹配您在此特定情况下重定向到的网址。所以要清楚,这是一个丑陋的第二选择,但如果一切都失败,值得尝试。

答案 3 :(得分:1)

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

如果他们做前者,requests将透明地处理它。请注意,任何合理的错误页面重定向仍会显示错误状态代码(例如404),您可以将其检查为response.status_code