您当前的位置:首页 > 计算机 > 编程开发 > Python

【案例演示】Requests模块发送网络请求

时间:02-06来源:作者:点击数:

由于Requests模块为第三方模块所以在是使用requests模块时需要通过执行pip install requests代码进行该模块的安装。如果使用了Anaconda则不需要单独安装Requests模块。Requests功能特性如下:

◆Keep-Alive &连接池

◆Unicode响应体

◆国际化域名和URL

◆HTTP(S)代理支持

◆带持久Cookie的会话

◆文件分块上传

◆浏览器式的SSL认证

◆流下载

◆自动内容解码

◆连接超时

◆基本/摘要式的身份认证

◆分块请求

◆优雅的key/value Cookie

◆支持.netrc

◆自动解压

1 GET请求

例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所示。

图片
图1 实现不带参数的网络请求

2 对响应结果进行utf-8编码

例2 获取请求地址所对应的网页源码

当响应状态码为200时说明本次网络请求已经成功,此时可以获取请求地址所对应的网页源码,代码如下:

import requests    # 导入网络请求模块requests

# 发送网络请求
response = requests.get('https://www.baidu.com/')
response.encoding='utf-8'    # 对响应结果进行utf-8编码
print(response.text)         # 以文本形式打印网页源码

程序运行结果如图2所示。

图片
图2 获取请求地址所对应的网页源码

注意:在没有对响应内容进行utf-8编码时,网页源码中的中文信息可能会出现如图3所示的乱码。

图片
图3 中文乱码

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”图片。

图片
图4打印的二进制数据
图片
图5 百度logo图片

4 GET(带参)请求

1. 实现请求地址带参

如果需要为GET请求指定参数时,可以直接将参数添加在请求地址URL的后面,然后用问号(?)进行分隔,如果一个URL地址中有多个参数,参数之间用(&)进行连接。GET(带参)请求代码如下:

import requests    # 导入网络请求模块requests

# 发送网络请求
response = requests.get('http://httpbin.org/get?name=Jack&age=30')
print(response.text)         # 打印响应结果

程序运行结果如图6所示。

图片
图6 输出的响应结果

说明:这里通过http://httpbin.org/get网站进行演示,该网站可以作为练习网络请求的一个站点使用,该网站可以模拟各种请求操作。

2. 配置params参数

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所示。

图片
图7 输出的响应结果

5 POST请求

例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所示。

图片
图8 输出的响应结果

说明:POST请求中data参数的数据的格式也可以是列表、元组或者是JSON。参数代码如下:

# 元组类型的表单数据
data = (('1','能力是有限的,而努力是无限的。'),
        ('2','星光不问赶路人,时光不负有心人。'))
# 列表类型的表单数据
data = [('1','能力是有限的,而努力是无限的。'),
        ('2','星光不问赶路人,时光不负有心人。')]
# 字典类型的表单参数
data = {'1': '能力是有限的,而努力是无限的。',
        '2':'星光不问赶路人,时光不负有心人。'}
# 将字典类型转换为JSON类型的表单数据
data = json.dumps(data)

注意:Requests模块中GET与POST请求的参数分别是params和data,所以不要将两种参数填写错误。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门