Python入门:Python3 requests模块全面学习教程

Python入门:Python requests模块全面学习教程

Python入门:Python requests模块全面学习教程,本文是围绕该模块的使用展开,其作为第三方 HTTP 请求库,因 API 简洁、功能完善,比标准库 urllib 更易用,是爬虫、接口测试等场景的首选工具。教程先介绍基础准备,包括通过 pip 安装模块及 import 导入;再详解核心操作,如发送 GET 请求获取网页或 JSON 数据(可带查询参数、请求头)、用 POST 提交表单或 JSON 数据,同时说明 response 对象的关键属性(状态码、编码、text/content/json () 等);还提及 PUT/DELETE 等其他 HTTP 方法及异常处理(应对网络错误、超时等问题),最后给出爬虫、接口测试场景的实践建议,助力开发者从入门到实战掌握 requests 模块。

前言

Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、Web开发、自动化)以及面向对象高级特性,最终具备独立开发能力和解决复杂问题的思维,高效应对数据分析、人工智能、Web应用、自动化脚本等广泛领域的实际需求。


🥇 点击进入Python入门专栏,Python凭借简洁易读的语法,是零基础学习编程的理想选择。本专栏专为初学者设计,系统讲解Python核心基础:变量、数据类型、流程控制、函数、文件操作及常用库入门。通过清晰示例与实用小项目,助你快速掌握编程思维,打下坚实根基,迈出自动化办公、数据分析或Web开发的第一步。

🥇 点击进入Python小游戏实战专栏, 寓教于乐,用Python亲手打造经典小游戏!本专栏通过开发贪吃蛇、飞机大战、猜数字、简易版俄罗斯方块等趣味项目,在实践中掌握Python核心语法、面向对象编程、事件处理、图形界面(如Pygame)等关键技能,将枯燥的代码学习转化为可见的成果,让学习编程充满乐趣与成就感,快速提升实战能力。

🥇 点击进入Python小工具实战专栏,告别重复劳动,用Python打造效率神器!本专栏教你开发文件批量处理、自动邮件通知、简易爬虫、桌面提醒、密码生成器、天气查询等实用小工具。聚焦os、shutil、requests、smtplib、schedule等核心库,通过真实场景案例,快速掌握自动化脚本编写技巧,解放双手,显著提升工作与生活效率,让代码真正服务于你的日常。

🥇 点击进入Python爬虫实战专栏,解锁网络数据宝库!本专栏手把手教你使用Python核心库(如requests、BeautifulSoup、Scrapy)构建高效爬虫。从基础网页解析到动态页面抓取、数据存储(CSV/数据库)、反爬策略应对及IP代理使用,通过实战项目(如电商比价、新闻聚合、图片采集、舆情监控),掌握合法合规获取并利用网络数据的核心技能,让数据成为你的超能力。

🥇 点击进入Python项目实战专栏,告别碎片化学习,挑战真实项目!本专栏精选Web应用开发(Flask/Django)、数据分析可视化、自动化办公系统、简易爬虫框架、API接口开发等综合项目。通过需求分析、架构设计、编码实现、测试部署的全流程,深入掌握工程化开发、代码复用、调试排错与团队协作核心能力,积累高质量作品集,真正具备解决复杂问题的Python实战经验。



🌐 前篇文章咱们练习了 Python3 math模块全面学习教程 ,如果忘记了,可以去重温一下,不停的重复敲击基础代码,有助于让你更加熟练掌握一门语言。今天咱们继续学习 ,Python3 requests模块全面学习教程,下面开始吧!

在Python爬虫、接口测试或Web开发中,HTTP请求是核心操作之一。虽然Python标准库中的urllib也能实现HTTP请求,但语法繁琐、操作复杂。而requests模块作为第三方HTTP库,以其简洁的API、完善的功能和极佳的易用性,成为了Python开发者处理HTTP请求的首选工具。

本文将从基础到实战,带你全面掌握requests模块的使用,无论是新手还是有一定基础的开发者,都能从中获益。

一、基础准备:安装与导入requests

在使用requests前,需要先完成安装(若已安装可跳过)。

1.1 安装requests

requests是第三方库,需通过pip命令安装,打开终端/命令提示符,执行以下命令:

bash 复制代码
pip install requests

若安装速度较慢,可使用国内镜像源(如阿里云):

bash 复制代码
pip install -i https://mirrors.aliyun.com/pypi/simple/ requests

1.2 导入requests

安装完成后,在Python代码中通过import语句导入模块,即可开始使用:

python 复制代码
import requests  # 导入requests库

二、发送第一个HTTP请求:GET请求入门

GET请求是最常用的HTTP请求方法,常用于获取网页内容或接口数据。下面以请求自己写的本地网站,演示如何发送GET请求并获取响应。

2.1 简单GET请求实例

python 复制代码
import requests

# 1. 发送GET请求到指定URL
response = requests.get("https://127.0.0.1/test")  # 返回一个response对象

# 2. 获取响应内容(网页源代码,Unicode格式)
print("网页内容(前500字符):")
print(response.text[:500])  # 打印前500字符,避免输出过长

运行代码后,会输出网页的部分HTML源代码,说明请求成功。

2.2 关键概念:response响应对象

每次调用requests.get()(或其他请求方法)后,都会返回一个response对象,该对象包含了服务器返回的所有响应信息。我们可以通过它的属性和方法获取关键数据。

下面列出最常用的response属性及用法,结合实例理解:

python 复制代码
import requests

response = requests.get("https://127.0.0.1/test/dbapi")

# 1. 响应状态码(判断请求是否成功,200=成功,404=页面不存在)
print("响应状态码:", response.status_code)  # 输出:200

# 2. 状态码描述(如"OK"、"Not Found")
print("状态码描述:", response.reason)  # 输出:OK

# 3. 编码方式(用于解码response.text)
print("默认编码:", response.encoding)  # 可能输出:ISO-8859-1(部分网站默认编码)

# 4. 自动识别的编码(更准确,推荐使用)
print("自动识别编码:", response.apparent_encoding)  # 输出:utf-8

# 5. 响应内容(字节格式,适用于图片、文件等二进制数据)
print("字节格式内容(前100字节):", response.content[:100])

# 6. 响应头(字典格式,包含服务器信息、内容类型等)
print("响应头(部分):", response.headers["Server"])  # 输出服务器类型

小技巧 :如果response.text出现乱码,可通过response.encoding = response.apparent_encoding修正编码。

三、获取JSON数据:接口请求常用场景

在接口测试或API调用中,服务器常返回JSON格式数据。requests提供了json()方法,可直接将JSON响应转换为Python字典,无需手动解析。

3.1 实例:请求JSON接口

以自己的后台的JSON示例接口为例:

python 复制代码
import requests

# 发送GET请求到JSON接口
response = requests.get("https://127.0.0.1/test/dbapi")

# 将JSON响应转换为Python字典
json_data = response.json()

# 解析数据
print("接口返回数据类型:", type(json_data))  # 输出:<class 'dict'>
print("网站名称:", json_data["name"])  # 输出:xcLeigh
print("第一个网站信息:", json_data["sites"][0]["name"])  # 输出:Google

注意 :若响应内容不是JSON格式,调用json()会抛出json.decoder.JSONDecodeError,需确保接口返回正确的JSON数据。

四、requests核心方法:覆盖所有HTTP请求类型

requests支持HTTP协议中的所有请求方法,如GET、POST、PUT、DELETE等,最常用的是GETPOST,下面分别详解。

4.1 GET请求进阶:带查询参数与请求头

实际场景中,GET请求常需要携带查询参数(如https://xxx.com?s=python中的s=python),或设置请求头(模拟浏览器,避免被网站拦截)。

4.1.1 带查询参数(params)

通过params参数传递查询参数(字典格式,requests会自动转换为URL编码,无需手动处理):

python 复制代码
import requests

# 1. 定义查询参数(字典)
params = {"s": "python 教程", "page": 1}  # 对应URL:?s=python+%E6%95%99%E7%A8%8B&page=1

# 2. 发送带参数的GET请求
response = requests.get(
    url="https://127.0.0.1/test/dbapi",
    params=params  # 传入查询参数
)

# 3. 查看最终请求的URL(验证参数是否正确)
print("最终请求URL:", response.url)  # 输出:https://127.0.0.1/test/dbapi/?s=python+%E6%95%99%E7%A8%8B&page=1

# 4. 查看响应状态码
print("响应状态码:", response.status_code)  # 输出:200
4.1.2 带请求头(headers)

部分网站会拦截非浏览器发起的请求,此时需设置headers模拟浏览器(关键是User-Agent字段):

python 复制代码
import requests

# 1. 定义请求头(模拟Chrome浏览器)
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/124.0.0.0 Safari/537.36"
}

# 2. 带请求头的GET请求
response = requests.get(
    url="https://127.0.0.1/test/dbapi",
    headers=headers
)

# 3. 验证请求是否成功
print("响应状态码:", response.status_code)  # 输出:200

4.2 POST请求:提交数据的常用方式

POST请求常用于提交数据(如表单提交、登录验证、接口数据上传),核心是通过datajson参数传递请求体。

4.2.1 提交表单数据(data参数)

表单数据通常为key-value格式,使用data参数传递(字典或元组列表):

python 复制代码
import requests

# 1. 定义表单数据(字典格式)
form_data = {"fname": "xcLeigh", "lname": "Boy"}  # 对应表单中的两个输入框

# 2. 发送POST请求(提交表单)
response = requests.post(
    url="https://127.0.0.1/test/dbapi",
    data=form_data  # 传入表单数据
)

# 3. 查看响应内容(服务器返回的结果)
print("服务器响应:", response.text)
# 输出:<p style='color:red;'>你好,xcLeigh Boy,今天过得怎么样?</p>
4.2.2 提交JSON数据(json参数)

若接口要求提交JSON格式的数据(而非表单),可直接使用json参数传递字典,requests会自动将其转换为JSON字符串,并设置Content-Type: application/json请求头:

python 复制代码
import requests

# 1. 定义JSON数据(字典)
json_data = {
    "username": "test_user",
    "password": "123456",
    "age": 25
}

# 2. 发送POST请求(提交JSON)
response = requests.post(
    url="https://api.example.com/login",  # 示例接口,需替换为实际接口
    json=json_data  # 传入JSON数据
)

# 3. 解析响应(假设接口返回JSON)
print("登录结果:", response.json())

4.3 其他HTTP方法:PUT、DELETE、HEAD

requests支持HTTP协议的所有方法,用法与GET/POST类似,只需调用对应的函数或使用通用的requests.request()方法。

方法 用途 示例代码
PUT 更新资源 requests.put(url, data={"name": "new_name"})
DELETE 删除资源 requests.delete(url, params={"id": 123})
HEAD 获取响应头(不返回内容) response = requests.head(url); print(response.headers)
request() 通用方法(指定请求类型) requests.request(method="GET", url=url, params=params)

五、异常处理:确保请求稳定

实际开发中,请求可能失败(如网络错误、服务器错误、404/500状态码),需通过异常处理保证程序不崩溃。

requests的异常主要通过raise_for_status()方法和requests.exceptions模块处理:

python 复制代码
import requests
from requests.exceptions import RequestException, ConnectionError, Timeout

try:
    response = requests.get(
        url="https://127.0.0.1/test/dbapi",
        timeout=5  # 设置超时时间(秒),避免无限等待
    )
    # 若状态码为4xx/5xx,抛出HTTPError异常
    response.raise_for_status()
    print("请求成功,内容:", response.text[:200])
except ConnectionError:
    print("错误:网络连接失败(如域名不存在、服务器不可达)")
except Timeout:
    print("错误:请求超时(服务器未在指定时间内响应)")
except RequestException as e:
    print(f"请求失败:{e}")  # 捕获其他所有requests异常

六、总结与实践建议

通过本文的学习,你已掌握requests模块的核心用法:

  1. 发送GET/POST请求,获取响应内容;
  2. 解析response对象的关键属性(状态码、编码、JSON数据);
  3. 携带查询参数、请求头、请求体(表单/JSON);
  4. 处理常见异常,确保请求稳定。

实践建议:

  1. 爬虫场景 :设置User-AgentCookie等请求头,避免被网站反爬;
  2. 接口测试 :优先使用json()方法解析响应,注意datajson参数的区别;
  3. 性能优化 :设置合理的timeout(避免超时阻塞),对大文件使用response.iter_content()迭代下载,避免占用过多内存。

赶紧动手实践吧!比如尝试请求你常用的网站接口,或写一个简单的爬虫获取网页内容,逐步熟练requests的用法。

💡下一篇咱们学习 Python入门:Python3 random模块全面学习教程!

附录:扩展学习资源

  1. 官方资源
  2. 本专栏特色资源
    • 代码资源仓库:CSDN专属资源在线获取
    • 海量Python教程 :关注公众号:xcLeigh,获取网盘地址
    • 一对一答疑 :添加微信与博主在线沟通(备注"Python专栏"

联系博主

xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。

亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


💞 关注博主 🌀 带你实现畅游前后端!

🏰 大屏可视化 🌀 带你体验酷炫大屏!

💯 神秘个人简介 🌀 带你体验不一样得介绍!

🥇 从零到一学习Python 🌀 带你玩转Python技术流!

🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!

💦 :本文撰写于CSDN平台 ,作者:xcLeigh所有权归作者所有)https://xcleigh.blog.csdn.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌

相关推荐
xcLeigh9 小时前
Python入门:Python3 statistics模块全面学习教程
开发语言·python·学习·模块·python3·statistics
YongCheng_Liang9 小时前
从零开始学 Python:自动化 / 运维开发实战(核心库 + 3 大实战场景)
python·自动化·运维开发
鸽芷咕9 小时前
为什么越来越多开发者转向 CANN 仓库中的 Python 自动化方案?
python·microsoft·自动化·cann
秋邱9 小时前
用 Python 写出 C++ 的性能?用CANN中PyPTO 算子开发硬核上手指南
开发语言·c++·python
GHL2842710909 小时前
分析式AI学习
人工智能·学习·ai编程
lpruoyu10 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
野犬寒鸦10 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
wenzhangli710 小时前
ooderA2UI BridgeCode 深度解析:从设计原理到 Trae Solo Skill 实践
java·开发语言·人工智能·开源
灵感菇_10 小时前
Java 锁机制全面解析
java·开发语言