使用 Python 请求获取 HEAD 内容
Posted
技术标签:
【中文标题】使用 Python 请求获取 HEAD 内容【英文标题】:Getting HEAD content with Python Requests 【发布时间】:2012-03-22 05:37:18 【问题描述】:我正在尝试解析使用 Python Requests 库完成的 HEAD 请求的结果,但似乎无法访问响应内容。
根据docs,我应该可以访问requests.Response.text中的内容。这在 GET 请求上对我来说很好,但在 HEAD 请求上返回 None。
GET 请求(有效)
import requests
response = requests.get(url)
content = response.text
内容 = <html>...</html>
HEAD 请求(无内容)
import requests
response = requests.head(url)
content = response.text
内容 = None
编辑
好的,我很快就意识到 HEAD 请求不应该返回仅内容标头的答案。但这是否意味着,要访问页面的<head>
标签中的内容,例如<link>
和<meta>
标签,必须获取整个文档?
【问题讨论】:
【参考方案1】:definition,对 HEAD 请求的响应不包含消息体。
如果你想发送一个 GET 请求,那么,得到一个响应体。发送 HEAD 请求 iff 你只对响应状态码和标头感兴趣。
HTTP 传输任意内容; HTTP 术语 header 与 HTML <head>
完全无关。但是,可以建议 HTTP 仅下载文档的一部分。如果您知道 HTML <head>
代码的长度(或其上限),则可以在请求中包含 HTTP Range 标头,以建议远程服务器仅返回一定数量的字节。如果远程服务器支持 HTTP 范围,那么它将提供简化的答案。
【讨论】:
好吧,我的错误——但是如何从 HEAD 请求中捕获<link>
和 meta
标签之类的东西——或者这不可能?
嗯,<link>
和 <meta>
标签只存在于 HTML body 中。您可以访问的唯一标头是 HTTP 标头。 为什么你还是要发送 HEAD 而不是 GET?
phihag- ? <meta>
标签位于此页面上文档视图源的<head>
部分。我希望只获得<head>
以减少链接抓取时间。
您在不同协议的上下文中混淆了相似的术语。 HTTP 对 HTML 代码一无所知;它只是传输带有标题的任意内容(例如内容类型或其到期日期)。如果您知道 HTML <head>
的长度,则可以在请求中包含 Range 标头,但我怀疑这会加快处理速度,除非完整的 HTML 代码非常庞大。【参考方案2】:
HEAD 没有任何内容!试试response.headers
- 这可能就是行动所在。 HTTP HEAD 请求没有获得您从 GET 请求中获得的 HTML 响应的 <head>
元素。我认为那是你的错误。
【讨论】:
【参考方案3】:HEAD 响应没有正文。它们只返回 HTTP 标头,与使用 GET 请求时获得的相同。
【讨论】:
以上是关于使用 Python 请求获取 HEAD 内容的主要内容,如果未能解决你的问题,请参考以下文章
在 Numpy Array 中转换 Python 获取请求(jpg 内容)的响应
Python Django之GET请求和POST请求及响应处理