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

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

off999 2024-10-08 06:21 22 浏览 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天在头条写日记# #冬季生活打卡季#

相关推荐

大文件传不动?WinRAR/7-Zip 入门到高手,这 5 个技巧让你效率翻倍

“这200张照片怎么传给女儿?微信发不了,邮箱附件又超限……”62岁的张阿姨对着电脑犯愁时,儿子只用了3分钟就把照片压缩成一个文件,还教她:“以后用压缩软件,比打包行李还方便!”职场人更懂这...

电脑解压缩软件推荐——7-Zip:免费、高效、简洁的文件管理神器

在日常工作中,我们经常需要处理压缩文件。无论是下载软件包、接收文件,还是存储大量数据,压缩和解压缩文件都成为了我们日常操作的一部分。而说到压缩解压软件,7-Zip绝对是一个不可忽视的名字。今天,我就来...

设置了加密密码zip文件要如何打开?这几个方法可以试试~

Zip是一种常见的压缩格式文件,文件还可以设置密码保护。那设置了密码的Zip文件要如何打开呢?不清楚的小伙伴一起来看看吧。当我们知道密码想要打开带密码的Zip文件,我们需要用到适用于Zip格式的解压缩...

大文件想要传输成功,怎么把ZIP文件分卷压缩

不知道各位小伙伴有没有这样的烦恼,发送很大很大的压缩包会受到限制,为此,想要在压缩过程中将文件拆分为几个压缩包并且同时为所有压缩包设置加密应该如何设置?方法一:使用7-Zip免费且强大的文件管理工具7...

高效处理 RAR 分卷压缩包:合并解压操作全攻略

在文件传输和存储过程中,当遇到大文件时,我们常常会使用分卷压缩的方式将其拆分成多个较小的压缩包,方便存储和传输。RAR作为一种常见的压缩格式,分卷压缩包的使用频率也很高。但很多人在拿到RAR分卷...

2个方法教你如何删除ZIP压缩包密码

zip压缩包设置了加密密码,每次解压文件都需要输入密码才能够顺利解压出文件,当压缩包文件不再需要加密的时候,大家肯定想删除压缩包密码,或是忘记了压缩包密码,想要通过删除操作将压缩包密码删除,就能够顺利...

速转!漏洞预警丨压缩软件Winrar目录穿越漏洞

WinRAR是一款功能强大的压缩包管理器,它是档案工具RAR在Windows环境下的图形界面。该软件可用于备份数据,缩减电子邮件附件的大小,解压缩从Internet上下载的RAR、ZIP及其它类...

文件解压方法和工具分享_文件解压工具下载

压缩文件减少文件大小,降低文件失效的概率,总得来说好处很多。所以很多文件我们下载下来都是压缩软件,很多小伙伴不知道怎么解压,或者不知道什么工具更好,所以今天做了文件解压方法和工具的分享给大家。一、解压...

[python]《Python编程快速上手:让繁琐工作自动化》学习笔记3

1.组织文件笔记(第9章)(代码下载)1.1文件与文件路径通过importshutil调用shutil模块操作目录,shutil模块能够在Python程序中实现文件复制、移动、改名和删除;同时...

Python内置tarfile模块:读写 tar 归档文件详解

一、学习目标1.1学习目标掌握Python内置模块tarfile的核心功能,包括:理解tar归档文件的原理与常见压缩格式(gzip/bz2/lzma)掌握tar文件的读写操作(创建、解压、查看、过滤...

使用python展开tar包_python拓展

类Unix的系统,打包文件经常使用的就是tar包,结合zip工具,可以方便的打包并解压。在python的标准库里面有tarfile库,可以方便实现生成了展开tar包。使用这个库最大的好处,可能就在于不...

银狐钓鱼再升级:白文件脚本化实现GO语言后门持久驻留

近期,火绒威胁情报中心监测到一批相对更为活跃的“银狐”系列变种木马。火绒安全工程师第一时间获取样本并进行分析。分析发现,该样本通过阿里云存储桶下发恶意文件,采用AppDomainManager进行白利...

ZIP文件怎么打开?2个简单方法教你轻松搞定!

在日常工作和生活中,我们经常会遇到各种压缩文件,其中最常见的格式之一就是ZIP。ZIP文件通过压缩数据来减少文件大小,方便我们进行存储和传输。然而,对于初学者来说,如何打开ZIP文件可能会成为一个小小...

Ubuntu—解压多个zip压缩文件.zip .z01 .z02

方法将所有zip文件放在同一目录中:zip_file.z01,zip_file.z02,zip_file.z03,...,zip_file.zip。在Zip3.0版本及以上,使用下列命令:将所有zi...

如何使用7-Zip对文件进行加密压缩

7-Zip是一款开源的文件归档工具,支持多种压缩格式,并提供了对压缩文件进行加密的功能。使用7-Zip可以轻松创建和解压.7z、.zip等格式的压缩文件,并且可以通过设置密码来保护压缩包中的...

取消回复欢迎 发表评论: