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

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

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

一、什么是requests库?

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

安装requests

首先确保已经安装requests库:

pip install requests

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

二、基础用法

1. 发送GET请求

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

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请求通常用于将数据提交到服务器,适合用于登录、上传等场景。

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)

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

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中,比如分页、过滤等。

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对象,它包含响应的状态、内容、编码等信息。

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()方法来捕获错误。

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参数可以设置超时时间,以避免请求因网络问题而无限等待。

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

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

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参数可以方便地进行文件上传。

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

2. 下载文件

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

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允许在多个请求之间共享会话,特别适用于需要身份验证的情况,例如登录后的请求。

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的场景下,可以通过代理访问。

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获取城市天气信息。

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.mzph.cn/news/886197.shtml

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

相关文章

已解决:spark代码中sqlContext.createDataframe空指针异常

这段代码是使用local模式运行spark代码。但是在获取了spark.sqlContext之后,用sqlContext将rdd算子转换为Dataframe的时候报错空指针异常 Exception in thread "main" org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: java.lang.Nu…

cooladmin 后端 查询记录

查询记录:pageQueryOp中列表查询的group by node ts controller代码如下 import { CoolController, BaseController } from cool-midway/core; import { Inject, Post, Get, Param } from midwayjs/decorator; import { ComparePricesPlanInfoEntity } from ../../…

cesium 3DTiles之pnts格式详解

Point Cloud 1 概述 点云(Point Cloud)瓦片格式用于高效流式传输大规模点云数据,常用于 3D 可视化中。每个点由位置(Position)和可选的属性定义,这些属性用来描述点的外观(如颜色、法线等&…

【SpringBoot】20 同步调用、异步调用、异步回调

Git仓库 https://gitee.com/Lin_DH/system 介绍 同步调用:指程序在执行时,调用方需要等待函数调用返回结果后,才能继续执行下一步操作,是一种阻塞式调用。 异步调用:指程序在执行时,调用方在调用函数后立…

ESLint 使用教程(五):ESLint 和 Prettier 的结合使用与冲突解决

系列文章 ESLint 使用教程(一):从零配置 ESLint ESLint 使用教程(二):一步步教你编写 Eslint 自定义规则 ESLint 使用教程(三):12个ESLint 配置项功能与使用方式详解 ES…

Qt_day5_常用类

常用类 目录 1. QString 字符串类(掌握) 2. 容器类(掌握) 2.1 顺序容器QList 2.2 关联容器QMap 3. 几种Qt数据类型(熟悉) 3.1 跨平台数据类型 3.2 QVariant 统一数据类型 3.3 QStringList 字符串列表 4. QD…

VBA学习笔记:基础知识

1.打开编辑器 工具-选项,可设置编辑器字体大小等 2. 运行 快捷键F5,或 运行-运行宏 若提示宏被禁止,解决办法之一:工具-宏-安全性-安全级-中,关闭excel重新打开,启用宏 保存文件格式为xla或xlam 3. 基本…

【CANOE】【学习】【DecodeString】字节转为中文字符输出

系列文章目录 文章目录 系列文章目录前言一、DecodeString 转为中文字节输出二、代码举例1.代码Demo2.DecodeString 函数说明函数语法:参数说明:返回值:使用示例:示例代码: 说明: 前言 有时候使用的时候&a…

超好用shell脚本NuShell mac安装

利用管道控制任意系统 Nu 可以在 Linux、macOS 和 Windows 上运行。一次学习,处处可用。 一切皆数据 Nu 管道使用结构化数据,你可以用同样的方式安全地选择,过滤和排序。停止解析字符串,开始解决问题。 强大的插件系统 具备强…

【Window主机访问Ubuntu从机——Xrdp配置与使用】

使用Xrdp在Window环境下远程桌面访问Ubuntu主机 文章目录 Ubuntu安装图形化界面Ubuntu安装Xrdp通过网线连接两台主机Window主机有线连接配置Ubuntu从机设置测试有线连接 Window主机打开远程桌面功能参考文章总结 Ubuntu安装图形化界面 sudo apt update sudo apt upgrade sudo …

ECharts图表图例8

用eclipse软件制作动态单仪表图 用java知识点 代码截图:

实验6记录网络与故障排除

实验6记录网络与故障排除 实验目的及要求: 通过实验,掌握如何利用文档记录网络设备相关信息并完成网络拓扑结构的绘制。能够使用各种技术和工具来找出连通性问题,使用文档来指导故障排除工作,确定具体的网络问题,实施…

读取文件内容、修改文件内容、识别文件夹目录(Web操作系统文件/文件夹详解)

前言 因 Unicode IDE 编辑器导入文件、文件夹需要,研究了下导入文件/文件夹的功能实现,发现目前相关文章有点少,故而记录下过程,如果有误,还望指正。(API的兼容性及相关属性、接口定义,请自行查看文件系统 …

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter)

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter) 更新以gitee为准: gitee地址 文章目录 卡尔曼滤波数据融合Python实现C语言实现多个数据如何融合附录:压缩字符串、大小端格式转换压缩字符串浮点数压缩Pac…

docker-hub 无法访问,使用windows魔法拉取docker images再上传到linux docker环境中

云机的服务器是可以docker拉取镜像的,但是本地的虚拟机、物理服务器等网络环境不好的情况,是无法访问docker-hub的,即使更换了docker镜像源国内源也无法使用。 本文章使用 在魔法网络环境下的windows,下载docker images后&#xf…

Python →爬虫实践

爬取研究中心的书目 现在&#xff0c;想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页&#xff0c;如下图所示&#xff0c;需要爬取的页面&#xff0c;标签信息是“<p>”&#xff0c;所以用 itemssoup.find_all("p&…

【Linux学习】【Ubuntu入门】1-4 ubuntu终端操作与shell命令1

1.使用快捷键CtrlAltT打开命令终端&#xff0c;或者单击右键点击… 2.常用shell命令 目录信息查看命令&#xff1a;ls ls -a&#xff1a;显示目录所有文件及文件夹&#xff0c;包括隐藏文件&#xff0c;比如以.开头的 ls -l&#xff1a;显示文件的详细信息 ls -al&#xff1…

WordPress 6.7 “Rollins”发布

每个 WordPress 版本都会向一位在音乐界留下不可磨灭印记的艺术家致敬。WordPress 6.7 的代号为“Rollins”&#xff0c;旨在向传奇爵士萨克斯演奏家桑尼罗林斯致敬。罗林斯是爵士乐界最伟大的即兴演奏家和先驱之一&#xff0c;他以精湛的技术、创新精神和无畏的音乐表达方式影…

ESXi安装【真机和虚拟机】(超详细)

项目简介&#xff1a; ESXi&#xff08;Elastic Sky X Integrated&#xff09;是VMware公司开发的一种裸机虚拟化管理程序&#xff0c;允许用户在单一物理服务器上运行多个虚拟机&#xff08;VM&#xff09;。它直接安装在服务器硬件上&#xff0c;而不是操作系统之上&#xff…

【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台

今天我们来借助若依来快速的搭建一个基于springboot的Java管理后台&#xff0c;后台网页使用vue3和 Element Plus来快速搭建。这里我们可以借助若依自动生成Java和vue3代码&#xff0c;这就是若依的强大之处&#xff0c;即便你不会Java和vue开发&#xff0c;只要跟着石头哥也可…