这知识点真细,Python获取HTTP响应头和响应体 Y3
📢📢📢📢📢📢
哈喽!大家好,我是 【梦想橡皮擦】,10 年产研经验,致力于 Python 相关技术栈传播 💗
⛳️ 实战案例场景
这篇博客涉及的知识点很小,就是为了获取 HTTP 响应数据,其中包括响应头和响应体两部分内容,如果配合开发者工具查阅,本文对应的数据查看地址如下所示:
案例目标是使用 Python 读取这些信息,本文用到的模块是 requests
,特点是简洁,实用。
案例中使用的站点是 example.com,一个专门用于我们爬虫学习练手的站点。
获取服务器响应内容的代码非常简单,如下所示:
import requests
res = requests.get('https://example.com/')
print(res)
得到的结果是响应对象 <Response [200]>
⛳️ 可获取的响应头
上文中的 res 是响应对象,先通过 dir 函数,查阅一下其包含的属性和方法。
import requests
res = requests.get('https://example.com/')
print(dir(res))
删除私有内容,得到如下结果集:
'apparent_encoding', 'close', 'connection', 'content', 'cookies', 'elapsed', 'encoding', 'headers', 'history', 'is_permanent_redirect', 'is_redirect', 'iter_content', 'iter_lines', 'json', 'links', 'next', 'ok
', 'raise_for_status', 'raw', 'reason', 'request', 'status_code', 'text', 'url'
其中只读属性为:
apparent_encoding
:chardet 库编码;content
:响应内容(字节类型);is_permanent_redirect
:是否为永久定向;links
:解析链接;ok
:当status_code
小于 400,为 True;text
:响应内容(unicode 类型);
上述内容可以直接进行代码测试获取:
import requests
res = requests.get('https://example.com/')
print(res.apparent_encoding) # ascii
# print(res.text)
# print(res.content)
print(res.is_permanent_redirect) # False
print(res.is_redirect) # False
print(res.links) # {}
print(res.next) # None
print(res.ok) # True
代码中被我注释掉的 res.text
和 res.content
就是获取网页请求体内容,区别可以简单理解为文本和二进制的区别。
除上述内容外,我们还可以获取网页编码等内容:
import requests
res = requests.get('https://example.com/')
print(res.headers)
print(res.cookies)
print(res.elapsed) # 响应时间
print(res.encoding) # UTF-8 编码
print(res.history)
print(res.raw)
print(res.reason) # OK 请求结果
print(res.request)
print(res.status_code) # 200 状态码
print(res.url) # 请求地址
上述代码中的 res.headers
就已经实现本文标题提及的响应头内容,运行代码会输出如下数据。
{'Content-Encoding': 'gzip', 'Accept-Ranges': 'bytes', 'Age': '545172', 'Cache-Control': 'max-age=604800', 'Content-Type': 'text/html; charset=UTF-8', 'Date': 'Fri, 01 Apr 2022 14:16:57 GMT', 'Etag': '"3147526947"', 'Expires': 'Fri, 08
Apr 2022 14:16:57 GMT', 'Last-Modified': 'Thu, 17 Oct 2019 07:18:26 GMT', 'Server': 'ECS (sab/5784)', 'Vary': 'Accept-Encoding', 'X-Cache': 'HIT', 'Content-Length': '648'}
该内容以字典形式呈现,可以直接对其中的值进行提取,所以一般看到的代码如下所示:
res.headers['Content-Encoding']
获取头部信息除了直接用字典的键访问意外,还可以使用 get()
方法获取,代码如下所示:
import requests
res = requests.get('https://example.com/')
print(res.headers.get('Content-Encoding'))
使用 get()
方法的好处就是可以设置一个默认值,当目标字典中没有对应键值时,可以返回。
print(res.headers.get('Content-Encoding_CA',None))
前文的代码中还提及了 res.status_code
,即网页状态码,在编写代码时,可以将响应状态码与 requests
模块提供的内置响应状态码做对比,查看请求是否成功。
内置的状态码如下所示:
print(requests.codes.ok)
print(requests.codes.all_good)
输出结果都为 200。
📣📣📣📣📣📣
🌻 本文如果发现错误,欢迎在评论区中指正哦 💗
- 点赞
- 收藏
- 关注作者
评论(0)