requests.history没有显示所有重定向

时间:2015-08-11 10:23:05

标签: python redirect python-requests wikipedia

我试图获取某些维基百科页面的重定向,并且它发生了一些奇怪的事情。

如果我做:

>>> request = requests.get("https://en.wikipedia.org/wiki/barcelona", allow_redirects=True)
>>> request.url
u'https://en.wikipedia.org/wiki/Barcelona'
>>> request.history
[<Response [301]>]

正如您所看到的,重定向是正确的,我在Python中的浏览器中有相同的URL。

但如果我尝试:

>>> request = requests.get("https://en.wikipedia.org/wiki/Yardymli_Rayon", allow_redirects=True)
>>> request.url
u'https://en.wikipedia.org/wiki/Yardymli_Rayon'
>>> request.history
[]

在浏览器中,我看到网址已更改为:https://en.wikipedia.org/wiki/Yardymli_District

任何人都知道如何解决它?

1 个答案:

答案 0 :(得分:3)

请求不显示重定向,因为您实际上并未在HTTP意义上重定向。维基百科做了一些JavaScript技巧(可能是HTML5历史修改和pushState)来改变地址栏中显示的地址,但当然不适用于请求。

换句话说,requests和您的浏览器都是正确的:requests显示您实际请求的网址(维基百科实际提供的服务),而您的浏览器的地址栏显示&#39;正确的&#39;,规范网址。

您可以解析回复并查找<link rel="canonical">标记,如果您想找出“适当的”标签。您的脚本中的网址,或者取代维基百科API上的文章。