【Python从入门到进阶】40、requests的基本使用

news/2024/11/24 11:47:56/

接上篇《39、使用Selenium自动验证滑块登录》
上一篇我们介绍了使用selenium进行滑块自动验证操作。本篇我们结束selenium的章节,来学习requests库的基本使用。

一、requests与urllib的爱恨情仇

1、requests与urllib的区别

大家在前面的学习中,访问网络服务基本上一直使用的都是urllib库,而这个requests库和urllib库的作用十分相似,都是用于发送HTTP请求、读取和解析网页内容等场景,但是他们也有一些本质上的区别:
(1)易用性
requests库更加简洁和易于使用。它提供了简单而直观的API,使得发送HTTP请求变得非常简单。相比之下,urllib库的接口相对复杂,需要编写更多的代码来完成同样的任务。
(2)功能丰富
requests库提供了许多高级功能,如会话管理、身份验证、文件上传、Cookie处理等。它还支持自动解析JSON响应和处理常见的HTTP错误。相比之下,urllib库的功能较为基础,需要手动实现这些功能。
(3)性能
从性能角度看,urllib库在某些情况下可能更快,因为它是Python标准库的一部分,而requests库是一个第三方库。然而,在大多数情况下,这种差异不太明显,因为它们底层都使用了相似的机制。
总的来说,如果你想要一个简单易用、功能强大的HTTP库,推荐使用requests。如果你只需要处理一些基本的HTTP请求,并且不想依赖第三方库,那么urllib也是一个可以考虑的选择。

2、为什么推荐使用requests而不是urllib

除了上面提到的requests的“易用性”和“功能丰富”特点外,还拥有以下优点:
(1)更好的可读性
requests的代码可读性更强,因为它使用了基于对象的方式来构建请求和处理响应。与之相比,urllib使用了一些较低级别的函数和参数,可能会导致代码更加冗长和难以理解。
(2)活跃的社区支持
requests是一个非常流行的Python库,拥有庞大而活跃的社区。这意味着你可以很容易地找到关于requests的文档、教程和示例,并且可以获得及时的支持和更新。
(3)兼容性和稳定性
requests经过广泛的测试和使用,已被证明在各种环境和情况下都很稳定。相比之下,urllib在一些特殊情况下可能会存在一些问题。
尽管urllib是Python的标准库,但由于requests提供了更好的易用性、功能和可读性,因此大多数开发者更倾向于使用requests来发送HTTP请求。

二、requests安装和导入

1、相关文档

requests库官方文档:http://cn.python-requests.org/zh_CN/latest/
requests库快速上手:http://cn.python-requests.org/zh_CN/latest/user/quickstart.html

2、安装和导入requests库

在开始使用requests库之前,首先需要确保它已经安装在你的Python环境中。你可以通过以下步骤完成安装:
(1)打开命令行终端。
(2)运行以下命令来安装requests库:

pip install requests

这将会从Python包管理器(pip)中下载并安装最新版本的requests库。
一旦requests库安装完成,我们就可以在Python脚本中导入它。使用import语句来导入requests模块:

import requests

然后我们就可以在脚本中使用requests库的功能来发送HTTP请求了。

三、requests库常见语法

以下是 requests 库的一些常见语法:

1、发送GET请求语法
response = requests.get(url, params=params, headers=headers)

其中,url是请求的目标URL,params是一个可选参数,用于指定查询字符串参数,headers是一个可选参数,用于设置请求头。

2、发送POST请求语法
response = requests.post(url, data=data, json=json_data, headers=headers)

其中,url是请求的目标URL,data是一个字典或字符串,用于作为请求体发送数据,json是一个字典或JSON字符串,会被自动转换为JSON格式并作为请求体发送,headers是一个可选参数,用于设置请求头。

3、获取响应内容
content = response.text

使用text属性可以获取响应的文本内容。

4、获取响应状态码
status_code = response.status_code

使用status_code属性可以获取响应的状态码。

5、设置响应的编码格式
response = requests.get(url)
response.encoding='utf-8'  # 设置响应内容的编码格式为utf-8

一般我们的响应内容中包含中文的话,获取text之前就需要设置编码。

5、处理异常情况
try:response = requests.get(url)response.raise_for_status()  # 检查是否有错误发生
except requests.exceptions.RequestException as e:print("请求发生异常:", e)

使用raise_for_status()方法可以检查是否有错误发生,并抛出适当的异常。
上面只是requests库的一小部分语法示例,还有更多功能和选项可用。大家可以通过阅读官方文档来了解更多详细信息:https://docs.python-requests.org/en/latest/

四、发送get及post请求示例

1、发送GET请求示例

使用requests.get()函数可以发送简单的GET请求。下面是一个发送GET请求并处理响应的基本示例:

import requests# 发送GET请求
response = requests.get("http://www.baidu.com/s?wd=河南")# 检查请求是否成功
if response.status_code == 200:# 处理响应内容response.encoding = 'utf-8' # 设置响应内容的编码格式为utf-8data = response.text  # 获取http响应信息print(data)
else:print("请求失败:", response.status_code)

在上述示例中,我们使用URL"http://www.baidu.com/s?wd=河南"发送了一个GET请求。requests.get()函数返回一个响应对象,我们可以通过response来访问响应的各种属性和方法。在这个示例中,我们检查状态码是否为200(表示成功),然后解析响应的html内容并打印出来(如果结果有中文,则需要设置编码格式)。
效果:

2、发送POST请求示例

有时候需要向服务器发送包含数据的POST请求。requests.post()函数可用于发送包含数据的POST请求。下面是一个发送POST请求的基本示例:
注:这是一个百度翻译的post请求,去翻译apple的中文含义。具体的headers中参数的设置方法,详见之前我们讲解urllib翻译中文的博文《【Python从入门到进阶】23.urllib使用post请求百度翻译》

import requests
import jsonurl = "https://fanyi.baidu.com/v2transapi?from=en&to=zh"
headers = {'User-Agents': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.66 Safari/537.36','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Cookie': 'BIDUPSID=9ACAA09E33A14A90B3A1F09AF6429144; PSTM=1680336365; REALTIME_TRANS_SWITCH=1; HISTORY_SWITCH=1; FANYI_WORD_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; BDUSS=DBuTGxTUkoxV0xlM0paSUlGRXZKSEl2U2FhQnI1c2YwdjdiZGJja04wOG9hTDVrRVFBQUFBJCQAAAAAAQAAAAEAAABzBe8oZ2xkenN3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjblmQo25Zkb; BDUSS_BFESS=DBuTGxTUkoxV0xlM0paSUlGRXZKSEl2U2FhQnI1c2YwdjdiZGJja04wOG9hTDVrRVFBQUFBJCQAAAAAAQAAAAEAAABzBe8oZ2xkenN3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjblmQo25Zkb; BAIDUID=C99AB112566ED56877EDCE374CBC55F5:FG=1; APPGUIDE_10_6_2=1; APPGUIDE_10_6_5=1; MCITY=-268%3A; BAIDUID_BFESS=C99AB112566ED56877EDCE374CBC55F5:FG=1; ZFY=bDrEaCX7:Ap0QdmZc6J3:Amu1ai6lctzuDpYDD2B3BlIY:C; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; RT="z=1&dm=baidu.com&si=eepethtdr6b&ss=lo5prtua&sl=4&tt=1io&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=3ge&cl=2zz&ul=c0a&hd=c0w"; BA_HECTOR=al2gah0k8g0g0g8l0l0181831ijnivp1q; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; delPer=0; PSINO=1; H_PS_PSSID=39322_39396_39531_39419_39541_39498_39551_39461_39234_39467_26350_39563_39427; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1698461891; APPGUIDE_10_6_6=1; BDRCVFR[BASDVugcKF6]=IdAnGome-nsnWnYPi4WUvY; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1698462793; ab_sr=1.0.1_OWFjMjI3MmMwNzFhNmVmN2NiZTUyNGVmOGQwNzNlODYzOGE5OGQxNzQ2NzMwYTg2ZmI0NDkzYWE5MzViNzY5MWNlMzJjMzczMGMxOGRlMzY2MWVjYmJlOTI2NTExYjNkMDgxMGQyNDNjZmNiY2U4ZTc1MWVkNmRhYjNjZTM4NDVhMDFiN2YwNWJjYzE5ZDBlMmM2MTUyZTZhMjMyZjdhY2RkODA0MWViZTYxMWJhYmI3ZDc1MGNmZjU0MmUyODBl'
}
data = {'from': 'en', # 要翻译的语言(英文)'to': 'zh', # 翻译后的语言(中文)'query': 'apple', # 要翻译的内容'transtype': 'realtime', # 翻译类型'simple_means_flag': 3, # 简单均值标志'sign': 704513.926512, # 签名'token':'507133edd1b6a9929fae99c7f9ca28f2', # 令牌'domain': 'common', # 领域:公共部分'ts': 1698462967794 # 时间戳
}
# 发送POST请求-百度翻译
response = requests.post(url=url, headers=headers, data=data)# 检查请求是否成功
if response.status_code == 200:# 处理响应内容response.encoding = 'utf-8'  # 设置响应内容的编码格式为utf-8data = response.text  # 获取响应信息jsonObj = json.loads(data)print(jsonObj)
else:print("请求失败:", response.status_code)

在上述示例中,我们使用requests.post()函数发送了一个包含数据的POST请求。我们将数据存储在一个字典中,并通过data参数传递给该函数。类似地,我们还可以使用json参数来发送JSON数据。
效果:

后续博文会讲解requests的其他功能,如代理和Cookie管理、文件上传和下载等。


参考:尚硅谷Python爬虫教程小白零基础速通
转载请注明出处:https://guangzai.blog.csdn.net/article/details/134089052


http://www.ppmy.cn/news/1182052.html

相关文章

京东平台数据分析:2023年9月京东空气净化器行业品牌销售排行榜

鲸参谋监测的京东平台9月份空气净化器市场销售数据已出炉! 9月份,空气净化器的销售同比上年增长。根据鲸参谋平台的数据显示,今年9月,京东平台空气净化器的销量将近15万,同比增长约1%;销售额将近2亿元&…

day53--动态规划12

309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 第一题:.最佳买卖股票时机含冷冻期 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完…

同城服务上门家教JAVA版小程序系统是怎样开发的?

现在随着互联网的普及和在线教育的兴起,同城服务上门家教业务逐渐受到家长的欢迎。为了满足市场需求,提高家教服务的品质和效率,我们开发了一款同城服务上门家教JAVA版小程序系统。本文将详细介绍该系统的开发过程和技术要点。 一、需求分析…

MySQL篇---第四篇

系列文章目录 文章目录 系列文章目录一、并发事务带来哪些问题?二、事务隔离级别有哪些?MySQL的默认隔离级别是?三、大表如何优化?一、并发事务带来哪些问题? 在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对 同一数据进行操作…

基于SSM和VUE的留守儿童信息管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

GB/T28181流媒体相关协议详解

GB/T28181流媒体相关协议详解 文章目录 GB/T28181流媒体相关协议详解1 GB/T28181协议中使用的应用层协议介绍2 实时视频点播协议交互流程2.1 设备注册2.2 设备保活2.3 视频播放 总结 本文主要主要针对28181协议中视频流的部分,来阐述视频流通过28181协议如何进行视频…

2023-10-28 LeetCode每日一题(从数量最多的堆取走礼物)

2023-10-28每日一题 一、题目编号 2558. 从数量最多的堆取走礼物二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 gifts ,表示各堆礼物的数量。每一秒,你需要执行以下操作: 选择礼物数量最多的那一堆。如果不止一堆都符…

ExoPlayer架构详解与源码分析(7)——SampleQueue

系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…