Python的Web请求:requests库入门与应用

ops/2024/11/14 13:54:41/

requests_0">Python的Web请求:requests库入门与应用

在Python中,进行网络请求和获取数据是许多应用程序的基础功能。requests库是Python中最流行的HTTP库之一,它以简洁、易用、功能强大的特点著称,可以帮助开发者高效地进行各种类型的Web请求。本文将带你快速上手requests库,并展示如何在实际项目中应用它。

requests_4">一、什么是requests库?

requests库用于发送HTTP请求,是在Python中处理REST API和Web爬虫的首选库。它简化了发送GET、POST等请求的过程,使处理HTTP协议更为高效。和Python标准库的urllib模块相比,requests库使用更方便且提供了更好的错误处理机制。

requests_8">安装requests

首先确保已经安装requests库:

pip install requests

安装完成后,就可以开始探索它的功能了!

二、基础用法

1. 发送GET请求

GET请求是最常用的请求类型,用于从服务器获取数据。通过requests.get()可以方便地发送GET请求。

python">import requestsresponse = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.status_code)  # 检查状态码,200表示请求成功
print(response.json())        # 获取响应的JSON内容

这里请求了一个示例API,response.json()将返回服务器的JSON响应数据。

2. 发送POST请求

POST请求通常用于将数据提交到服务器,适合用于登录、上传等场景。

python">import requestsdata = {"title": "Hello World","body": "This is a sample post","userId": 1
}
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=data)
print(response.status_code)
print(response.json())

POST请求中可以通过json参数传递数据。requests会自动将数据编码为JSON格式并添加正确的Content-Type头部。

3. 请求头(Headers)

有时我们需要指定请求头来控制请求行为,例如指定用户代理或授权令牌。

python">headers = {"User-Agent": "Mozilla/5.0","Authorization": "Bearer YOUR_ACCESS_TOKEN"
}
response = requests.get("https://api.example.com/data", headers=headers)
print(response.json())

通过headers参数可以轻松设置请求头,以满足API的要求。

4. 查询参数(Params)

可以通过params参数将查询参数添加到请求URL中,比如分页、过滤等。

python">params = {"page": 2,"limit": 10
}
response = requests.get("https://jsonplaceholder.typicode.com/posts", params=params)
print(response.url)  # 输出完整的请求URL
print(response.json())

这段代码会发送一个带有查询参数的GET请求,请求URL会自动附加这些参数。

三、响应对象解析

每次请求都会返回一个Response对象,它包含响应的状态、内容、编码等信息。

python">response = requests.get("https://jsonplaceholder.typicode.com/posts/1")# 状态码
print(response.status_code)# 响应文本(字符串格式)
print(response.text)# JSON数据
print(response.json())# 响应头
print(response.headers)# 编码
print(response.encoding)

通过这些属性,可以方便地获取响应的各项内容和细节信息。

四、错误处理

在实际项目中,需要关注请求是否成功,以避免程序中断。requests库提供了基本的错误处理机制,可以通过检查状态码或使用raise_for_status()方法来捕获错误。

python">try:response = requests.get("https://jsonplaceholder.typicode.com/posts/9999")response.raise_for_status()  # 如果状态码不是200,将抛出HTTPError异常
except requests.exceptions.HTTPError as e:print(f"请求出错: {e}")

此外,requests库也包含了其他异常类型,比如ConnectionErrorTimeoutRequestException等,用于捕获不同的错误情况。

五、超时与重试

在网络请求中,超时和重试是确保程序稳定的重要机制。通过timeout参数可以设置超时时间,以避免请求因网络问题而无限等待。

python">try:response = requests.get("https://jsonplaceholder.typicode.com/posts", timeout=5)  # 超时时间5秒
except requests.exceptions.Timeout:print("请求超时")

还可以使用requests库中的Session对象进行重试:

python">from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retrysession = requests.Session()
retries = Retry(total=3, backoff_factor=0.1, status_forcelist=[500, 502, 503, 504])
session.mount("http://", HTTPAdapter(max_retries=retries))response = session.get("https://jsonplaceholder.typicode.com/posts")
print(response.status_code)

这里设置了重试策略,以应对可能的服务器错误。

六、文件上传与下载

1. 上传文件

上传文件是POST请求的常见需求,requests库的files参数可以方便地进行文件上传。

python">files = {"file": open("example.jpg", "rb")
}
response = requests.post("https://httpbin.org/post", files=files)
print(response.json())

2. 下载文件

对于文件下载,可以直接使用response.content保存文件内容。

python">url = "https://via.placeholder.com/150"
response = requests.get(url)with open("downloaded_image.jpg", "wb") as file:file.write(response.content)

通过这种方式,可以下载图片、PDF等二进制文件。

七、会话(Session)

requests.Session允许在多个请求之间共享会话,特别适用于需要身份验证的情况,例如登录后的请求。

python">session = requests.Session()# 先登录
login_data = {"username": "user", "password": "pass"}
session.post("https://example.com/login", data=login_data)# 登录后访问其他页面
response = session.get("https://example.com/profile")
print(response.text)

通过Session对象,登录后的Cookie会自动在后续请求中携带,保持会话一致性。

八、代理支持

在需要翻墙或隐藏IP的场景下,可以通过代理访问。

python">proxies = {"http": "http://10.10.10.10:8080","https": "https://10.10.10.10:8080"
}
response = requests.get("https://example.com", proxies=proxies)
print(response.status_code)

设置代理可以帮助你在特定网络环境下进行请求,并提供更高的隐私保护。

九、综合实战:获取天气数据

以下是一个结合前面内容的示例,通过API获取城市天气信息。

python">import requestsdef get_weather(city):url = "https://api.open-meteo.com/v1/forecast"params = {"latitude": "40.7128",  # 示例坐标"longitude": "-74.0060","hourly": "temperature_2m"}headers = {"User-Agent": "Mozilla/5.0"}try:response = requests.get(url, params=params, headers=headers, timeout=5)response.raise_for_status()data = response.json()print(f"{city} 的天气:", data)except requests.exceptions.RequestException as e:print(f"请求失败: {e}")get_weather("New York")

总结

本文介绍了requests库的基本用法和高级应用,包括GET和POST请求、请求头、错误处理、文件上传下载等操作。通过requests库,你可以轻松地完成Web数据采集、API集成、文件处理等任务,是Python开发者必备的工具之一。希望本教程能帮助你掌握requests库的使用,并灵活应用到实际项目中!


http://www.ppmy.cn/ops/133293.html

相关文章

深度学习之卷积神经网络(CNN)

​ 卷积神经网络是一种用来处理局部和整体相关性的计算网络结构,被应用在图像识别、自然语言处理甚至是语音识别领域,因为图像数据具有显著的局部与整体关系,其在图像识别领域的应用获得了巨大的成功。 1 卷积神经网络的组成层 ​ 以图像分…

CMake 实战

我现在项目的目录结构如下 project_root/ ├── CMakeLists.txt ├── main.cpp 主函数 ├── third_part/ │ ├── CMakeLists.txt # 总的 third_part CMakeLists.txt │ ├── json/ │ │ ├── CMakeLists.txt # json 的 CMakeLists.txt │ │ └── json.hpp │ ├…

用 PHP或Python加密字符串,用iOS解密

可以使用对称加密算法(如 AES)来加密和解密字符串。对称加密适合这种跨平台加密解密的需求,因为可以使用相同的密钥和算法在不同的编程语言和系统之间进行加密和解密。 下面展示如何使用 Python 或 PHP 进行加密,然后用 iOS (Swi…

Unity学习笔记(2):场景绘制

文章目录 前言开发环境场景资源导入Unity2d 瓦片功能更改游戏视图缩放比例 叠层Tilemap如何分层 总结 前言 我也算是跨行学Unity。我希望学了这个东西能有用吧。对以后的工作的要求,时薪高。唉,先学着好了。不知道以后的行情是如何,但是上位…

探索LINQ在C#中的应用:从基本查询到数据联接

LINQ(语言集成查询)是微软为.NET框架开发的一种强大功能,于2007年作为C# 3.0和Visual Basic .NET 9.0的一部分引入。LINQ的诞生旨在提供一种一致且直观的方式来查询和操作数据,无论数据来源是内存中的集合、数据库还是XML文档。 …

【测试框架篇】单元测试框架pytest(1):环境安装和配置

一、pytest简介 Pytest是Python的一种单元测试框架,与Python自带的unittest测试框架类似,但是比 unittest框架使用起来更简洁,效率更高。 二、pytest特点 Pytest是一个非常成熟的Python测试框架,主要特点有以下几点: 非常容易…

DAY59||并查集理论基础 |寻找存在的路径

并查集理论基础 并查集主要有两个功能&#xff1a; 将两个元素添加到一个集合中。判断两个元素在不在同一个集合 代码模板 int n 1005; // n根据题目中节点数量而定&#xff0c;一般比节点数量大一点就好 vector<int> father vector<int> (n, 0); // C里的一…

C++开发基础之使用librabbitmq库实现RabbitMQ消息队列通信

1. 前言 RabbitMQ是一个流行的开源消息队列系统&#xff0c;支持多种消息协议&#xff0c;广泛用于构建分布式系统和微服务架构。可以在不同应用程序之间实现异步消息传递。在本文中&#xff0c;我们将熟悉如何使用C与RabbitMQ进行消息通信。 2. 准备工作 在 Windows 平台上…