为什么 requests.history 不显示所有重定向?

aro*_*ire 1 python redirect wikipedia python-requests

我正在尝试获取一些维基百科页面的重定向,但是从请求中得到的内容.history对我来说有点奇怪。

如果我做:

>>> 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]>]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,重定向是正确的,并且我得到的 URL 与.history从浏览器访问页面时得到的 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
[]
Run Code Online (Sandbox Code Playgroud)

.history是空的,但在浏览器中我看到 URL 实际上已更改为: https: //en.wikipedia.org/wiki/Yardymli_District

有人知道如何解决吗?

Wan*_*uta 5

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

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

<link rel="canonical">如果您想从脚本中找出“正确”的 URL,或者通过维基百科的API获取文章,您可以解析响应并查找标签。