Python中的requests模块(第5节)


Python作为一门简单易学又功能强大的编程语言,在网络通信和Web开发领域应用非常广泛。Python中的核心模块如urllib模块、requests模块和http模块,在处理网络请求、HTTP请求和响应以及Web开发中扮演着重要的角色。这些模块为开发者提供了丰富的工具,使其能够灵活处理网络通信、构建Web应用和与远程服务器进行交互。

1、requests模块简介

在Python的标准库中,上一节教程里面介绍的urllib模块虽然已经包含了平常我们使用的大多数功能。然而,在某些情况下,使用第三方库的requests模块更为方便和易用。

requests模块是一个优雅且简洁的HTTP库,专门设计用于发送各种类型的HTTP请求。它由Kenneth Reitz于2010年创建,并迅速成为Python编程中最受欢迎的模块。相比于Python标准库中的urllib模块,requests模块提供了更加简洁而直观的API,使得发送HTTP请求变得非常容易。开发人员无需处理复杂的细节,只需几行代码就可以完成常见的网络通信任务。

尽管requests模块在Python编程中非常受欢迎,并且广泛用于HTTP请求,但它并不属于Python的标准库。Python的标准库是指那些随着Python解释器一起安装的库,而requests模块是一个独立的第三方库,所以需自行安装。

2、安装requests模块

如果你使用的是Pyhint编辑器,requests模块已经提前为你安装在“Pyhint\condition\Python38\Lib\site-packages”文件夹内,直接使用“import requests”语句即可导入使用。如果你使用的是其它编辑器,你需要自行安装requests库,使用Python的包管理工具pip来安装requests库是最简单的方法。在cmd终端窗口中,输入以下命令安装requests库:

pip install requests

执行以上安装命令,如果运行结果出现“Successfully installed”,说明已经安装成功;如果运行结果出现“Requirement already satisfied”,说明该模块已经被安装过,不用再安装。不懂得安装第三方库,可以参考本教程第10章中第9节和第10节里面的内容。

3、requests模块中常用的一些方法:

requests.request():构造一个请求。

requests.get():发送GET请求并返回响应对象,获取HTML网页的主要方法。

requests.post():发送POST请求并返回响应对象,向HTML网页提交POST请求的方法。

requests.head():获取HTML网页的头信息的方法,对应于HTTP的HEAD。

requests.put():向HTML网页提交PUT请求的方法,对应于HTTP的PUT。

requests.patch():向HTML网页提交局部修改请求,对应于HTTP的PATCH。

requests.delete():向HTML网页提交删除请求的方法,对应于HTTP的DELETE。

requests.json():自动将json字符串类型的响应内容转换为Python对象 (dict字典类型或list列表类型)。

requests.text:获取HTTP响应内容的字符串形式,也就是url对应的页面内容。

requests.content:获取二进制形式的响应内容。

requests.url:返回响应的url,有时候响应的url和请求的url并不一致。

requests.tatus_code:HTTP请求的返回状态,200表示请求连接成功,404表示请求连接失败。

requests.request.headers:响应对应的请求头。

requests.headers:响应头部信息。

requests.request.cookies:响应对应请求的cookie; 返回cookieJar类型。

requests.cookies:响应的cookie (经过了set-cookie动作; 返回cookieJar类型)。

4、发送GET请求

使用Requests库发送GET请求非常简单。你只需要使用requests.get()函数,并传入目标URL即可。例如:

动手练一练:

import requests

def fetch_baidu():
    response = requests.get("http://www.baidu.com")
    print("获取响应状态码:", response.status_code)
    print("获取响应头:", response.headers)
    print("响应对应的请求头:", response.request.headers)
    print("获取响应的url:", response.url)
    with open("D:\\baidu.txt", "w", encoding="utf8") as f:
        f.write(response.text)

if __name__ == "__main__":
    fetch_baidu()

执行以上代码,输出结果为:

获取响应状态码 200
获取响应头 {'Bdpagetype': '1', 'Bdqid': '0xff6d26ca002ef681', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html; charset=utf-8', 'Date': 'Fri, 28 Jun 2024 03:39:02 GMT', 'Server': 'BWS/1.1', 'Set-Cookie': 'BIDUPSID=A1CE4812458ED9540A4C3F152BA7EB; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2636546864657; path=/; domain=.baidu.com, PSTM=179695834; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=26564853686; path=/; domain=.baidu.com, H_PS_PSSID=68337_63252_67865; path=/; expires=Sat, 28-Jun-25 03:39:02 GMT; domain=.baidu.com, BDSVRTM=10; path=/, BD_HOME=1; path=/, BAIDUID=A1CE82853458ED87650A9CC3F16E2BA7EB:FG=1; Path=/; Domain=baidu.com; Max-Age=36736000, BAIDUID_BFESS=A1CE8523658ED9540A9CC3F16E2BA7EB:FG=1; Path=/; Domain=baidu.com; Max-Age=38546000; Secure; SameSite=None', 'Traceid': '1719644327242736725882184055265651839273', 'X-Ua-Compatible': 'IE=Edge,chrome=1', 'X-Xss-Protection': '1;mode=block', 'Transfer-Encoding': 'chunked'}
响应对应的请求头 {'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
获取响应的url http://www.baidu.com/

上面的例子中,每次调用requests请求之后,会返回一个response对象,该对象包含了具体的响应信息,如状态码、响应头、响应内容(网页的源代码)等,最后我们把网页的源代码成功保存到D盘的baidu.txt文件中。

5、发送POST请求

使用Requests库发送POST请求也非常简单,与GET请求类似,你只需要使用requests.post()函数,并传入目标URL和要提交的数据即可。例如:

动手练一练:

import requests

# 要提交的数据
data = {"username": "user", "password": "123123"}
# 发送POST请求
response = requests.post("https://httpbin.org/post", data=data)
# 打印响应内容
print(response.text)

执行以上代码,输出结果为:

{
"args": {}, 
"data": "", 
"files": {}, 
"form": {
"password": "123123", 
"username": "user"
}, 
"headers": {
"Accept": "*/*", 
"Accept-Encoding": "gzip, deflate", 
"Content-Length": "29", 
"Content-Type": "application/x-www-form-urlencoded", 
"Host": "httpbin.org", 
"User-Agent": "python-requests/2.31.0", 
"X-Amzn-Trace-Id": "Root=1-421548775d-0bac7bd51923bf4a4d116557"
}, 
"json": null, 
"origin": "126.25.186.255", 
"url": "https://httpbin.org/post"
}

上面的例子中,我们模拟发送请求的站点是httpbin.org,它可以提供HTTP请求测试,本次我们请求的URL为:http://httpbin.org/post,这个链接可以用来测试POST请求。通过测试,我们成功发送POST请求并返回响应对象。

6、requests模块的应用

requests模块是Python中最受欢迎的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。在网络爬虫、数据抓取、测试API等领域被广泛应用。

(1)网络爬虫

网络爬虫是requests模块应用的一个典型场景。通过发送HTTP请求,爬虫程序可以获取网页内容,并对其进行解析和提取信息。requests模块提供了简洁而强大的API,使得编写爬虫程序变得简单而高效。

(2)API调用

requests模块也广泛应用于调用各种Web API接口。许多Web服务提供了API接口,通过发送HTTP请求,我们可以与这些服务进行交互,并获取数据或执行操作。

(3)Web自动化测试

requests模块也可以用于编写Web自动化测试脚本。通过发送HTTP请求,我们可以模拟用户与Web应用的交互,并进行自动化测试。

总之,Python作为一门强大的编程语言,广泛用于网络数据采集和爬虫应用。在这个信息时代,互联网上蕴含着无穷无尽的数据,而requests模块作为Python爬虫中的重要工具,为我们提供了与Web服务器通信的便捷途径。