使用 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 内容的主要内容,如果未能解决你的问题,请参考以下文章

Python 3:使用请求不会获取网页的全部内容

python网络爬虫学习随笔

在 Numpy Array 中转换 Python 获取请求(jpg 内容)的响应

Python Django之GET请求和POST请求及响应处理

python parallel发送1000+ url请求并获取内容信息

3.Python Django之GET请求和POST请求及响应处理