Python网络请求之Requests详解一
一、前言:
- 前面我们讲解了urillib3库的使用知识。
- 本次我们将通过最新最标准的官方文档来学习另一个python 中非常流行的网络请求模块Requests
- Requests 是用Python语言编写,优雅而简单的HTTP库,其采用的开源协议为Apache2 License,所以大家可以放心的使用哦。
- 浏览过urillib3的小伙伴们不知道有没有注意到,Requests内部也是采用来urillib3哦。所以大家可以想到,Requests使用起来肯定会比urillib3更简单便捷哦。
二、Requests的安装
- 我们直接食用pip安装即可
pip3 install requests
三、搬砖历程
- 使用requests发起一个网络请求是非常简单的。
1、第一步,当然是要导入我们的requests模块
import requests
2、get请求
- 我们以创建一个请求以get的方式获取github的发布时间数据
- 请求后其会返回一个Respose对象,respose对象中存储了请求的结果数据。
import requests r = requests.get(‘https://api.github.com/events') print(r.status_code) 200 print(r.text) u’[{“repository”:{“open_issues”:0,“url”:“https://github.com/…
- 如上,我们可以通过status_code获取响应码,text获取响应的内容,respose还有很多属性,我们后面会继续学习
- 如果我们想创建其他的请求如post、put、delete
import requests r = requests.post(‘http://httpbin.org/post', data = {‘key’:‘value’}) r = requests.put(‘http://httpbin.org/put', data = {‘key’:‘value’}) r = requests.delete(‘http://httpbin.org/delete')
- 是不是感觉很简单呢?其实这只是个开始哦
3、创建带参数的url请求
import requests payload = {‘key1’: ‘value1’, ‘key2’: ‘value2’} r = requests.get(‘http://httpbin.org/get', params=payload) print(r.url) http://httpbin.org/get?key2=value2&key1=value1
- 注意事项:有一点我们要注意哦,如果我们的字典的值是None,其是不会被加入参数中的哦
import requests payload = {‘key1’: ‘value1’, ‘key2’: None} r = requests.get(‘http://httpbin.org/get', params=payload) print(r.url) http://httpbin.org/get?key1=value1
4、解码
- requests本身支持无缝解码,其会根据请求的数据页面的编码进行自动解码。
- 我们可以打印一下之前的请求
import requests r = r = requests.get(‘https://api.github.com/events') print(r.encoding) print(r.text) utf-8 [{“id”:“6594940555”,“type”:“IssuesEvent”,“actor”:{“id”…
- 如果我们可以直接通过设置encoding重新设置其编码。
- 如果更改编码,请求将在调用r.text时使用r.encoding的新值重新进行编码。
- 当然我们也可以通过r.content来查找编码,然后设置r.encoding这也是常用的方式
5、直接获取响应的原始数据
- 我们可以直接通过request.content获取byte类型的响应数据而不需要通过request.txt属性去获取
- 而且我们还可以通过iter_content返回byte类型数据的迭代器,直接存进文件中,一般可以采用如下的模版代码。
import requests r = r = requests.get(‘https://api.github.com/events') print(r.content) b’[{“id”:“6601500059”,“type”:“PushEvent”,“actor”:{“id”:1468181,“login”:“hk。。。。 with open(‘save_data.txt’, ‘wb’) as fd: for chunk in r.iter_content(chunk_size=128): fd.write(chunk)
6、直接以json格式获取响应的数据
- 一般开发中我们用到的数据都要经过自己加工后将其转换为json格式的数据。
- 但是用了requests之后我们就可以省去这部分工作了。
- 我们获得response对象后直接调用json()方法即可
import requests r = r = requests.get(‘https://api.github.com/events') print(r.json()) [{‘id’: ‘6601503359’, ’type’: ‘CreateEvent’, ‘actor’: {‘id’: 25371315, ’login’: ‘Chandra0505’, ‘display_login’: ‘……
7、requests获取原始的套件字响应。
- 我们一般不需要获取原始的套接字响应数据,但是如果你有需要的话requests也已经给我们提供有相关的api了。
- 我们只需要在请求时设置一个stream参数为True,然后通过r.raw即可获取原始的套接字数据,之后根据需要调用read从里面拿数据即可。
import requests r = r = requests.get(‘https://api.github.com/events',stream=True); print(r.raw) print(r.raw.read(10))