一、前言:
前面我们讲解了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)
注意事项:有一点我们要注意哦,如果我们的字典的值是None,其是不会被加入参数中的哦
import requests
payload = {'key1': 'value1', 'key2': None}
r = requests.get('http://httpbin.org/get', params=payload)
print(r.url)
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))