百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

爬虫必备(7)- 网络请求利器requests库

off999 2024-10-08 06:21 32 浏览 0 评论

在先前的文章中,我们深入讲解了Python标准库(Standard Library)`urllib`通讯库的实际运用。`urllib`作为Python编程语言的重要组成部分之一,其主要职责在于支持 HTTP 和 FTP 等主流网络协议,并内置多样化的函数及功能,旨在有效便捷地检索各类网页数据以及实现基础性的网络爬虫任务等。本文,则将向您介绍一个更为广泛应用且便利的通讯库——`requests`。

`requests`系一款简洁易用、功能完善的HTTP库,基于`urllib`开发,以轻量级的方式表现HTTP处理能力。在继承其丰富功能特性的基础上,还呈现出更具人性化用户友好的API接口设计,进而大幅度提升了使用者对该通讯库的接受度与满意度,使得在实践运用过程中能够得心应手。已经成为Python事实上的通讯请求库。

requests 是一个三方库,因此在使用之前需要提前安装。

pip install requests

GET 请求

GET 作为 HTTP 通讯中最为常见的请求方式,我们优先来看一下如何使用 requests 来完成一个 GET 请求。

此处案例依然使用 httpbin 的接口来测试

import requests as req

res = req.get("https://httpbin.org/get")

if res.status_code == 200:
    print(res.text)
else:
    print(f"Error: {res.status_code}")

# {
#   "args": {}, 
#   "headers": {
#     "Accept": "*/*", 
#     "Accept-Encoding": "gzip, deflate", 
#     "Host": "httpbin.org", 
#     "User-Agent": "python-requests/2.31.0", 
#     "X-Amzn-Trace-Id": "Root=1-65981de0-38498b4b13dce608142e59cb"
#   }, 
#   "origin": "110.176.23.189", 
#   "url": "https://httpbin.org/get"
# }

可以看到,使用 requests 可以非常方便的发起一个 GET 请求,而且语义更加明确,相较于 urllib 中的 urlopen 更为方便。

POST 请求

requests 发起 post 同样非常简单,方便,如下方代码:

import requests as req

res = req.post("https://httpbin.org/post", data={"name": "John", "age": 30})
print(res.status_code)

# 200

可以看到,通过 post 方法,并直接指定 data 传递参数就可以发起 post 请求。

响应处理

requests 在获取响应数据时同样非常方便,返回的结果被封装到了 response 对象中,并通过 text 和 content 属性即可获取到数据,另外还可以获取到状态码,响应头,Cookies 等数据。

import requests as req

res = req.get("https://httpbin.org/get")

if res.status_code == 200:
    print("响应码:", res.status_code)
    print("响应头:", res.headers)
    print("Cookies:", res.cookies)
    print("响应内容:", res.text)
    print("url:", res.url)
    print("请求历史:", res.history)

# 响应码: 200
# 响应头: {'Date': 'Sun, 07 Jan 2024 09:15:29 GMT', 'Content-Type': 'application/json', 'Content-Length': '308', 'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'}
# Cookies: <RequestsCookieJar[]>
# 响应内容: {
#   "args": {}, 
#   "headers": {
#     "Accept": "*/*", 
#     "Accept-Encoding": "gzip, deflate", 
#     "Host": "httpbin.org", 
#     "User-Agent": "python-requests/2.31.0", 
#     "X-Amzn-Trace-Id": "Root=1-659a6bb1-18aed04963d8a8e02865f827"
#   }, 
#   "origin": "110.176.23.189", 
#   "url": "https://httpbin.org/get"
# }

# url: https://httpbin.org/get
# 请求历史: []

如上边的代码,通讯响应成功后,就会获取到 response 对象,通过status_code 可以获取到响应码,我们一般会通过响应码来判断此次通讯是否成功,来继续后续的操作。requests 中有 codes 类封装了所有的状态码,如下图:

因此还可以使用如下表示来判断通信的状态。

res.status_code == req.codes.ok

response 还可以通过其他属性来获取相关内容,如下:

headers: 读取响应头信息,其中包含了服务器返回的各种元数据,如:Conntent-Type 等。

url: 请求的 url

content: 响应的内容,一般是字符串或字节数组(二进制文件)

encoding: 响应编码格式

elapsed:请求和响应的时间差,单位为秒

history: 请求历史记录,如果有值则是一个列表,包含了请求的 URL,状态码和头信息等内容

response 中还提供额外的方法来获取更多的内容,如下:

json():将相应内容解析为 Python 对象,这是一个非常有用的方法,对于 Ajax 方法获取的 json 字符串就不需要手动做转换了。

text():将响应内容作为字符串返回,此方法可以直接获取文本数据。

content():获取响应内容的二进制数据,一般用来获取影音,图片等。

raise_for_status():一般用来检查通讯是否成功,因为此方法在状态码不是 200 的时候会抛出一个异常。

close():关闭响应对象,释放相关资源。

到这里你可能会问,像 text,content 两个既有属性,又有方法,那到底该用哪个?

response.text 属性会自动将响应的内容解码为字符串,所以再使用的时候就不需要手动处理编解码的问题,可以直接使用。相对的 text()方法会将响应的内容解码为字节数组,然后再转为字符串,所以在解码之前对响应内容进行一些额外的处理(比如编解码)。

response.content 属性是一个只读属性,返回响应内容的二进制数据,所以在使用的时候可以直接访问原始的二进制数据,无需手动解码。而 content()方法是一个可读写的方法,虽然也是返回的二进制内容,但是与属性不同的是,调用 content()方法时,requests 会先讲相应内容解码为字节数组,再将其转换为二进制数据,因此在解码之前可以对响应内容做一些额外的处理。

请求参数设置

requests 中设置请求参数同样非常简单,而且支持高级的功能设置,本文简单介绍一下 get 和 post 如何设置请求参数。

# get请求设置query参数和header
requests.get("https://httpbin.org/get", 
             params={"name": "John", "age": 30}, 
             headers={"User-Agent": "Mozilla/5.0"})

# post请求设置query参数和header
requests.post("https://httpbin.org/post", 
              data={"name": "John", "age": 30}, 
              headers={"User-Agent": "Mozilla/5.0"})

#挑战30天在头条写日记# #冬季生活打卡季#

相关推荐

笔记本电脑系统修复软件(笔记本电脑程序修复)

1、超级兔子2013系统修复软件超级兔子是一款完整的系统维护工具。拥有电脑系统评测、垃圾清理和注册表清理、可疑文件和插件检测、网页防护等功能,同时自带一些实用的系统工具,可清理你大多数的文件、注册表里...

联想保修服务包括哪些(联想保修都保修什么)

1、保修36个月的硬件包括:CPU、内存。2、保修24个月的硬件包括:主板、显卡、LCD屏、硬盘、电源适配器、键盘、鼠标模块。3、保修12个月的硬件包括:LCD之附件、光驱、DVD、CDR/W、软驱...

系统科学大会(中国系统科学学会)

2021年各种科学大会的召开时间取决于疫情的发展和国家政策的调整。一些大型的国际科学会议可能会推迟或者采用线上形式进行,以保障参会人员的安全和健康。同时,一些国内的学术会议也会受到疫情的影响,需要推迟...

win10系统下载的内容在哪(win10下载的软件在哪个文件夹)

进入C:\Windows\SoftwareDistribution\Download目录下,通过win10应用商店中下载的安装包都放在此目录下。进入C:\Windows\SoftwareDistrib...

下载原版xp系统光盘(xp光盘系统安装教程怎么安装)

方法步骤步骤如下:1、首先打开计算机,在电脑光驱上放入XP光盘,启动电脑后不停按F12、F11、Esc等启动热键,在弹出的启动菜单中选择DVD选项,回车。2、进入光盘主菜单,按数字2或点击选项2运行w...

windows7中文版下载安装(windows7安装包下载)

谢邀,如果你戳设置-时间和语言-区域和语言,右边的语言提示“只允许使用一种语言包”,那么你的系统就是家庭中文版。家庭中文版限定系统界面只能使用简体中文显示,其他功能则与普通家庭版没有区别,也可以使用其...

win7开机按f2怎么重装系统(win7开机按f12怎么重装系统)

开机或重启时,在进入Windows前按F2进入BIOS。  ←→移动到第三个好像是BOOT。  然后将EXTENELBOOT选项设置为ENABLE  最后按F5将第一启动项目设置为EXTENEL...

win10驱动管理(win10驱动程序)
win10驱动管理(win10驱动程序)

win10由于联网后会自动安装驱动,如果自动安装驱动没出现问题,即可视为最佳驱动,若出现问题,卸载出问题的驱动,然后去查自己主板型号,在主板供应商官网下载对应驱动即是最佳01Windows10驱动更新调整当前当你插入连接即插即用(Pn...

2025-12-29 05:51 off999

手机上怎么找qq邮箱登录(用手机怎么找到qq邮箱)

入口是“联系人”选项卡。qq邮箱手机在QQ主菜单中选择下方的“联系人”选项卡;3、在“联系人”中选取“公众号”选项卡;4、在公众号中菜单中找到或搜索“QQ邮箱提醒”,点击进入;5、点击“进入邮箱”;6...

amd显卡控制面板

AMD显卡控制面板是用来管理你的AMD显卡的,可以在控制面板中进行设置一些简单的调整,来提升显卡性能和效果。1、先打开AMD控制面板。2、打开“垂直同步(V-SYNC)”功能,可调整细节,改善影像流畅...

win10老是未响应卡死(window10总是未响应)

具体方法:1、如果win10中的应用程序出现不响应的情况,应该是应用程序加载失败了。可以通过重置方法来解决win10应用程序无响应。2、登录win10系统,用管理员身份运行Powershell(可在C...

usb安装系统步骤(USB安装系统步骤)

1.准备一张U盘,将联想官网下载的系统镜像文件复制到U盘中;2.将U盘插入联想S41U电脑,重启电脑,按F12进入BIOS设置,将U盘设置为启动项;3.重启电脑,进入U盘安装界面,按提示操作,完成系统...

win98安装教程(win98iso怎么安装)

如何安装windows98  一、具体安装步骤  备份好重要文件之后,就可以安装windows98了。  第一步:启动安装程序。  用户如果原来已安装了windows95/97/98,现在拟对其进行升...

雨林木风win7安装(雨林木风win732位安装教程)

  安装步骤如下:  1、光盘放入光驱,复制光盘上的win7.gho和安装系统.exe到硬盘非C盘的文件夹;(gho文件名可以是其他名字,后缀为gho,体积最大的就是。)  2、双击安装系统.exe;...

win10解绑管理员账户(win10管理员账户怎么取消开机密码)

要解除Windows10电脑上的管理员权限,您需要进行以下操作:1.打开“控制面板”:右键单击“开始”按钮,然后选择“控制面板”。2.进入“用户账户”:在控制面板中,选择“用户账户”。3.点击...

取消回复欢迎 发表评论: