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

news2024/11/14 5:26:59

接上篇《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-8
    data = 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 json

url = "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-8
    data = 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.coloradmin.cn/o/1143452.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.23每日一题(反常积分收敛性的判断)

解法一:用定义(当被积函数的原函数比较好找时): 积分结果为存在则收敛,不存在则发散。 解法二:通过p积分的比较法判断敛散性: 即被积函数与p积分相比较,使得两者同敛散;再…

轻量封装WebGPU渲染系统示例<3>-纹理立方体(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/ImgTexturedCube.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 5…

算法通过村第十七关-贪心|黄金笔记|跳跃游戏

文章目录 前言跳跃游戏最短跳跃游戏总结 前言 提示:曾走过山,走过水,其实只是借助他们走过我的生命;我看着天,看着地,其实只是借助它们确定我的位置;我爱这她,爱着你,其实…

【Java】基于微服务架构的智慧工地监管云平台源码带APP

前言:智慧工地监管平台是一种利用物联网、云计算、大数据等技术手段实现工地信息化管理的解决方案。它通过数据采集、分析和应用,在实时监控、风险预警、资源调度等方面为工地管理者提供了全方位的支持,提高了工地管理的效率和质量。智慧监管…

数据结构OJ题

目录 1.字符串左旋 2.字符串旋转结果 3.旋转数组 4.移除元素 本篇主要是讲解一些OJ题目。 1.字符串左旋 字符串左旋 实现一个函数,可以左旋字符串中的k个字符 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法1【暴力求解】 翻转1…

Mybatis @MapKey注解返回指定Map源码解析与用例

文章目录 前言技术积累什么是MyBatisMapKey注解 用例展示MapKey注解源码解析写在最后 前言 最近在开发的一个业务功能需要从一批数据中根据业务字段提取数据,对于这个需求可能有的同学就直接用for或者stream循环的方式进行处理了。但是,作为一个资深的搬…

了解模拟电路设计(入门级)

模拟电路是电路设计中一个重要的部分,它是指用来对模拟信号进行传输,变换,处理,放大,测量和显示等等工作的电路。而模拟信号是指连续变化的电信号(数字信号是离散的电信号)。 常见的模拟电路主要…

前端Vue页面中如何展示本地图片

<el-table :data"tableData" stripe style"width: 100%"><el-table-column prop"imgUrl" label"图片"><template v-slot"scope"><img :src "http://localhost:8888/image/ scope.row.imgUrl&qu…

【ROS入门】雷达、摄像头及kinect信息仿真以及显示

文章结构 雷达信息仿真以及显示Gazebo仿真雷达配置雷达传感器信息xacro文件集成启动仿真环境 Rviz显示雷达数据 摄像头信息仿真以及显示Gazebo仿真摄像头新建xacro文件&#xff0c;配置摄像头传感器信息xacro文件集成启动仿真环境 Rviz显示摄像头数据 kinect信息仿真以及显示Ga…

支持CT、MR三维后处理的医学PACS源码

医学影像归档与通信系统&#xff08;picture archiving and communication systems&#xff0c;PACS&#xff09;是应用于医院的数字医疗设备&#xff0c;如CT、MR&#xff08;磁共振&#xff09;、US&#xff08;超声成像&#xff09;、X线、DSA&#xff08;数字减影&#xff…

Android framework服务命令行工具框架 - Android13

Android framework服务命令行工具框架 - Android13 1、framework服务命令行工具简介2、cmd 执行程序2.1 目录和Android.bp2.2 cmdMain 执行入口2.3 cmd命令 3、am命令工具&#xff0c;实质脚本执行cmd activity3.1 sh脚本3.2 activity服务注册3.3 onShellCommand执行 4、简易时…

【Leetcode】【每日一题】【简单】2558. 从数量最多的堆取走礼物

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/take-gifts-from-the-richest-pi…

NodeJS爬取墨刀上的设计图片

背景 设计人员分享了一个墨刀的原型图&#xff0c;但是给的是只读权限&#xff0c;无法下载其中的素材&#xff1b;开发时想下载里面的一张动图&#xff0c;通过浏览器的F12工具在页面结构找到了图片地址。 但是浏览器直接访问后发现没权限&#xff1a; Nginx 的 403 页面。。…

VistaSoftware.vTask Studio 7.913 Crack

VistaTask 是一款支持包括互联网活动&#xff0c;数据库查询&#xff0c;文件操作&#xff0c;窗口控制&#xff0c;鼠标活动&#xff0c;键盘输入以及其它活动在内的160多种不同活动的全功能自动控制工具。你可以通过简单的拖拽想要的活动的方式来指定新的自动控制任务&#x…

HDFS 短路读的实现(全网最全面深入讲解)

文章目录 前言1. 知识准备1.1 关于域套接字(Domain Socket)什么是Domain SocketDomain Socket 通信在ShortCircuit Read中做了什么DomainSocket 在Hadoop上的基本实现 1.2 关于内存映射(MMAP)什么是MMAPMMAP在ShortCircuit中的作用是什么 1.3 关于共享内存(Shared Memory)什么是…

USB学习(3):USB描述符和USB类设备

文章目录 1 USB描述符(Descriptors)1.1 设备描述符(Device Descriptor)1.2 配置描述符(Configuration Descriptor)1.3 接口关联描述符(Interface Association Descriptor)1.4 接口描述符(Interface Descriptor)1.5 端点描述符(Endpoint Descriptor)1.6 字符串描述符(String Des…

CS224W2.1——传统基于特征的方法(节点层级特征)

CS224W1.1——图机器学习介绍CS224W1.2——图机器学习应用CS224W1.3——图表示的选择 前面几篇介绍了图机器学习的基础一些背景知识&#xff0c;我们知道图机器学习任务分为多个层级&#xff1a; 节点层级任务边层级任务子图层级任务图层级任务 这篇主要讲传统的基于特征方法…

基于MFC的串口通信

1、串口通信的概述&#xff1a; 串口是一种重要的通信资源&#xff0c;例如鼠标口、USB接口都是串口。串行端口是CPU和串行设备间的编码转换器。当数据从CPU经过端口发送出去的时候&#xff0c;字节数据会被转为串行的位&#xff0c;在接收数据时&#xff0c;串行的位被转换为…

无线WIFI接入FreeRadius进行认证——筑梦之路

环境说明 硬件设备&#xff1a; ASUS RT-AC88U路由器 服务器系统&#xff1a;Ubuntu 16.04 软件版本&#xff1a;FreeRADIUS 2.2.8 服务安装搭建 1. 安装freeradius apt-get install freeradius freeradius-mysql 2. 配置用户 vim /etc/freeradius/userssteve Cleart…

数据结构绪论,基本概念

目录 1.什么是数据结构&#xff1f; 2.三种数据结构&#xff1a; 3.第一章绪论 了解概念 1.几个概念 2.数据存储方式&#xff1a; 3.算法的五个重要特性: 4.算法设计的要求: 1.什么是数据结构&#xff1f; 数据 数据&#xff0c;是对客观事物的符号表示&#xff0c;在计…