requests.history 未显示所有重定向

requests.history not showing all redirects

我正在尝试获取一些维基百科页面的重定向,这让我感到好奇。

如果我做:

>>> 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]>]

如您所见,重定向是正确的,我在浏览器中的 url 与 Python.

中的相同

但如果我尝试:

>>> 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
[]

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

有人知道怎么解决吗?

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

换句话说,requests 和您的浏览器都是正确的:requests 显示的是您实际请求的 URL(以及实际提供的维基百科),而您浏览器的地址栏是显示 'proper'、规范 URL。

如果您想从脚本中找出 'proper' URL,或者通过维基百科的 [=13= 获取文章,您可以解析响应并查找 <link rel="canonical"> 标记] 相反。