由于Requests模块为第三方模块所以在是使用requests模块时需要通过执行pip install requests代码进行该模块的安装。如果使用了Anaconda则不需要单独安装Requests模块。Requests功能特性如下:
◆Keep-Alive &连接池
◆Unicode响应体
◆国际化域名和URL
◆HTTP(S)代理支持
◆带持久Cookie的会话
◆文件分块上传
◆浏览器式的SSL认证
◆流下载
◆自动内容解码
◆连接超时
◆基本/摘要式的身份认证
◆分块请求
◆优雅的key/value Cookie
◆支持.netrc
◆自动解压
例1 实现不带参数的GET网络请求
最常用的HTTP请求方式分别为GET和POST,在使用Requests模块实现GET请求时可以使用两种方式来实现,一种是带参数另一种为不带参数,以百度为例实现不带参数的网络请求。代码如下:
import requests # 导入网络请求模块requests
# 发送网络请求
response = requests.get('https://www.baidu.com')
print('响应状态码为:',response.status_code) # 打印状态码
print('请求的网络地址为:',response.url) # 打印请求url
print('头部信息为:',response.headers) # 打印头部信息
print('cookie信息为:',response.cookies) # 打印cookie信息
程序运行结果如图1所示。
例2 获取请求地址所对应的网页源码
当响应状态码为200时说明本次网络请求已经成功,此时可以获取请求地址所对应的网页源码,代码如下:
import requests # 导入网络请求模块requests
# 发送网络请求
response = requests.get('https://www.baidu.com/')
response.encoding='utf-8' # 对响应结果进行utf-8编码
print(response.text) # 以文本形式打印网页源码
程序运行结果如图2所示。
注意:在没有对响应内容进行utf-8编码时,网页源码中的中文信息可能会出现如图3所示的乱码。
例3 下载百度首页中的logo图片
使用Requests模块中的get函数不仅可以获取网页中的源码信息,还可以获取二进制文件。但是在获取二进制文件时,需要使用Response.content属性获取bytes类型的数据,然后将数据保存在本地文件中。例如下载百度首页中的logo图片即可使用如下代码:
import requests # 导入网络请求模块requests
# 发送网络请求
response = requests.get('https://www.baidu.com/img/bd_logo1.png?where=super')
print(response.content) # 打印二进制数据
with open('百度logo.png','wb')as f: # 通过open函数将二进制数据写入本地文件
f.write(response.content) # 写入
程序运行后打印的二进制数据如图4所示。程序运行后,当前目录下将自动生成如图5所示的“百度logo.png”图片。
如果需要为GET请求指定参数时,可以直接将参数添加在请求地址URL的后面,然后用问号(?)进行分隔,如果一个URL地址中有多个参数,参数之间用(&)进行连接。GET(带参)请求代码如下:
import requests # 导入网络请求模块requests
# 发送网络请求
response = requests.get('http://httpbin.org/get?name=Jack&age=30')
print(response.text) # 打印响应结果
程序运行结果如图6所示。
说明:这里通过http://httpbin.org/get网站进行演示,该网站可以作为练习网络请求的一个站点使用,该网站可以模拟各种请求操作。
Requests模块提供了传递参数的方法,允许你使用params 关键字参数,以一个字符串字典来提供这些参数。例如,你想传递 key1=value1 和 key2=value2 到 httpbin.org/get ,那么你可以使用如下代码:
import requests # 导入网络请求模块requests
data = {'name':'Michael','age':'36'} # 定义请求参数
# 发送网络请求
response = requests.get('http://httpbin.org/get',params=data)
print(response.text) # 打印响应结果
程序运行结果如图7所示。
例4实现POST请求
POST请求方式也叫做提交表单,表单中的数据内容就是对应的请求参数。使用Requests模块实现POST请求时需要设置请求参数data。POST请求的代码如下:
import requests # 导入网络请求模块requests
import json # 导入json模块
# 字典类型的表单参数
data = {'1': '能力是有限的,而努力是无限的。',
'2':'星光不问赶路人,时光不负有心人。'}
# 发送网络请求
response = requests.post('http://httpbin.org/post',data=data)
response_dict = json.loads(response.text) # 将响应数据转换为字典类型
print(response_dict) # 打印转换后的响应数据
程序运行结果如图8所示。
说明:POST请求中data参数的数据的格式也可以是列表、元组或者是JSON。参数代码如下:
# 元组类型的表单数据
data = (('1','能力是有限的,而努力是无限的。'),
('2','星光不问赶路人,时光不负有心人。'))
# 列表类型的表单数据
data = [('1','能力是有限的,而努力是无限的。'),
('2','星光不问赶路人,时光不负有心人。')]
# 字典类型的表单参数
data = {'1': '能力是有限的,而努力是无限的。',
'2':'星光不问赶路人,时光不负有心人。'}
# 将字典类型转换为JSON类型的表单数据
data = json.dumps(data)
注意:Requests模块中GET与POST请求的参数分别是params和data,所以不要将两种参数填写错误。