python请求链接头

use*_*085 12 python header hyperlink python-requests

我正在尝试找到捕获响应头下列出的链接的最佳方法,就像这个,我正在使用python请求模块.下面是Python Requests页面上链接标题部分的链接:docs.python-requests.org/en/latest/user/advanced/

但是,在我的情况下,我的响应标头包含如下链接:

{'content-length': '12276', 'via': '1.1 varnish-v4', 'links': '<http://justblahblahblah.com/link8.html>;rel="last">,<http://justblahblahblah.com/link2.html>;rel="next">', 'vary': 'Accept-Encoding, Origin'}
Run Code Online (Sandbox Code Playgroud)

请注意>在"最后"之后,这不是请求示例中的情况,我似乎无法弄清楚如何解决这个问题.

小智 26

已经有一种方法requests可以访问链接头

response.links
Run Code Online (Sandbox Code Playgroud)

它返回链接标题值的字典,可以使用进一步解析

response.links['next']['url']
Run Code Online (Sandbox Code Playgroud)

获得所需的值.


Ali*_*lik 9

您可以手动解析标头的值.为了简化操作,您可能希望使用请求的解析功能parse_header_links作为参考.

或者你可以做一些查找/替换和使用原始 parse_header_links

In [1]: import requests

In [2]: d = {'content-length': '12276', 'via': '1.1 varnish-v4', 'links': '<http://justblahblahblah.com/link8.html>;rel="last">,<http://justblahblahblah.com/link2.html>;rel="next">', 'vary': 'Accept-Encoding, Origin'}

In [3]: requests.utils.parse_header_links(d['links'].rstrip('>').replace('>,<', ',<'))
Out[3]:
[{'rel': 'last', 'url': 'http://justblahblahblah.com/link8.html'},
 {'rel': 'next', 'url': 'http://justblahblahblah.com/link2.html'}]
Run Code Online (Sandbox Code Playgroud)

如果之间可能有一两个空格>,,<则需要使用正则表达式替换.

  • 下一个答案是,使用“response.links”是正确的选择。 (3认同)