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.rhkb.cn/news/469872.html

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

相关文章

windows 11编译安装ffmpeg(包含ffplay)

一、源码及安装包下载 1.1,ffmpeg源码包下载 下载地址:Download FFmpeg 1.2,mysys下载 下载地址:MSYS2 1.3,libx264源码包下载 下载地址:x264, the best H.264/AVC encoder - VideoLAN 二、软件安装 2.1&…

从0开始深度学习(28)——序列模型

序列模型是指一类特别设计来处理序列数据的神经网络模型。序列数据指的是数据中的每个元素都有先后顺序,比如时间序列数据(股票价格、天气变化等)、自然语言文本(句子中的单词顺序)、语音信号等。 1 统计工具 前面介绍…

【考研数学:高数2】数列极限

目录 前言 一、数列极限的概念 1.常见前n项和 2.等差、等比数列 3.数列的性质 (1)单调性 (2)有界性 二、数列极限的定义 三、收敛数列的性质 1.概念 2.例题 四、极限的四则运算 五、海涅定理(归结原则&…

计算机网络分析题

网络的布置 根据具体需求布置网络 第二小题、网络的划分 根据路由表作出路由器拓扑图 ARP跨网络寻址 TCP报文段格式概念 网桥的转发表与动作 网络嗅探报文 十六进制化作十进制 嗅探以太网帧首部 除MAC帧以外,其他各层协议数据单元都是源地址在前,目…

PHP爬虫快速获取京东商品详情(代码示例)

在当今互联网时代,数据的重要性不言而喻。对于电商领域来说,获取商品信息是数据分析、市场研究和价格监控的基础。本文将介绍如何使用PHP编写一个简单的爬虫,以快速获取京东商品的详情信息。 1. 概述 京东是中国领先的电商平台之一&#xff…

快速学习Serde包实现rust对象序列化

在处理HTTP请求时,我们总是需要在数据结构对象(可以是enum、struct等)和序列化数据格式(例如JSON,用与存储或传输,并可以反序列化的格式)之间来回转换。 Serde是一个库(crate&#x…

OLED 显示画面的变换操作——上下、左右翻转

OLED 画面旋转 OLED 写入函数定义 OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常OLED 显示界面转换函数如下 void OLED_DisplayTurn(u8 i) {if(i0…

由播客转向个人定制的音频频道(1)平台搭建

项目的背景 最近开始听喜马拉雅播客的内容,但是发现许多不方便的地方。 休息的时候收听喜马拉雅,但是还需要不断地选择喜马拉雅的内容,比较麻烦,而且黑灯操作反而伤眼睛。 喜马拉雅为代表的播客平台都是VOD 形式的&#xff0…

luckfox-pico-max学习记录

0.文件编译及烧录 SDK包在文件夹/home/tao/linux/luckfox/luckfox-pico-spi应用程序样例在文件夹/home/tao/linux/luckfox-pico-spi/demo编译:sudo ./build.sh生成的镜像文件在./luckfox-pico-spi/output/image中,将所有文件复制到windows电脑文件夹I:\…

一文了解珈和科技在农业遥感领域的服务内容和能力

2020年,农业农村部、中央网信办联合印发了《数字农业农村发展规划(2019-2025年)》,对数字农业农村建设作出了具体部署。其中,农业遥感作为推进数字农业农村的重要力量贯穿《规划》始终。 今年10月,农业农村…

羊城杯2020Easyphp

审题 看到url,可以想到伪协议读取 尝试过后可以发现,题目绕过了read后面的编码 我们可以尝试双重urlencode进行绕过 ?filephp://filter/read%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%…

【时间之外】IT人求职和创业应知【34】-人和机器人,机器人更可靠

目录 新闻一:人形机器人产业持续高速增长,2026年中国市场规模将突破200亿元 新闻二:AI技术驱动设备厂商格局变化,部分厂商市占率快速提升 新闻三:华为与江淮汽车携手打造超高端品牌“尊界”,计划于明年春…

Linux——基础指令2 + 权限

目录 1.zip/unzip 2.tar 3.bc 4.uname –r 5.重要的几个热键 6.扩展命令 7.shell命令以及运行原理 8.Linux权限的理解 关于权限的三个问题: 1.目录权限 2.缺省权限 3.粘滞位 1.zip/unzip 打包、压缩:使用特定的算法,文件进行合…

pgsql和mysql的自增主键差异

1. 当有历史数据存在时, mysql的自增主键是默认从最大值自增。 pgsql的自增主键取初始值开始逐个尝试,所以存在可能与历史数据的主键重复的情况。 pgsql解决上述问题的方式:重设自增值。 SELECT SETVAL(t_db_filed_id_seq, (SELECT MAX(&q…

【Linux】基础IO及文件描述符相关内容详细梳理

0. C语言文件I/O 在C语言中,我们学习了相关函数来读写文件,例如:fopen,fwrite,fread,fprintf等, 在C语言中文件的打开方式: r Open text file for reading. …

大语言模型在序列推荐中的应用

一、简介 序列推荐技术通过分析用户的过往交互历史,能够有效挖掘出用户可能感兴趣的项目,对于提升各类应用的服务质量具有重要作用。近期,大语言模型(LLMs)的发展在应对复杂的推荐问题上展现出了显著的优势。不过&…

JavaScript——函数、事件与BOM对象

一、系统函数(JS中预置的函数) JS的预置函数在遇到非数字字符时会停止解析 parseInt 转整型 parseFloat 转浮点型 isNaN !isNaN("10") 检测是否纯数字 eval 把字符串转成算式并计算 1.parseInt(string, radix); 语法: string&#x…

Python酷库之旅-第三方库Pandas(208)

目录 一、用法精讲 971、pandas.MultiIndex.set_levels方法 971-1、语法 971-2、参数 971-3、功能 971-4、返回值 971-5、说明 971-6、用法 971-6-1、数据准备 971-6-2、代码示例 971-6-3、结果输出 972、pandas.MultiIndex.from_arrays类方法 972-1、语法 972-2…

相亲小程序(源码+文档+部署+讲解)

最近我在挖掘一些优秀的开源项目时,无意间发现了一个相当给力的系统——相亲小程序管理系统。这个系统不仅功能实用,而且代码结构清晰,易于二次开发。作为一名技术爱好者,我觉得有必要把这个好东西推荐给我的读者们。接下来&#…

spring cloud 入门笔记1(RestTemplate,Consul)

最大感受: spring cloud无非是将spring boot中的各个工作模块拆分成独立的小spring boot,各个模块之间,不再是通过导包什么的,调用而是通过网路进行各个模块之间的调用 工具一:RestTemplate 在Java代码中发送HTTP请…