Python 模块精讲:requests(第三方)— 最流行 HTTP 请求库(爬虫 / 接口必用)

张开发
2026/4/17 8:50:35 15 分钟阅读

分享文章

Python 模块精讲:requests(第三方)— 最流行 HTTP 请求库(爬虫 / 接口必用)
本章学习目标本章聚焦Python 网络请求核心技能帮助你从零掌握requests第三方库的完整用法。通过本章学习你将全面掌握理解requests在爬虫、接口开发中的核心地位掌握 GET/POST/ 请求头 / 参数 / JSON / 文件上传全场景用法熟练使用会话保持、代理、超时、异常处理能独立完成接口自动化、数据采集、接口联调任务写出稳定、高效、工程化的 HTTP 请求代码一、引言为什么 requests 是 Python 必学 HTTP 库1.1 背景与意义核心认知在 Python 开发中HTTP 请求是连接前端、后端、第三方服务、数据爬虫的最核心桥梁。Python 自带urllib底层繁琐、代码量大、易出错而requests以 “HTTP for Humans” 为设计理念用极简 API 实现强大功能成为全球 Python 开发者首选。无论是爬虫采集、接口自动化测试、后端对接、AI 数据获取、自动化办公requests 都是必备工具。据行业统计95% 以上的 Python 爬虫与接口项目都基于 requests 开发是进入网络编程的必经之路。1.2 本章结构概览为了帮助读者系统性掌握本章内容我将从以下维度展开plaintext 概念解析 → 安装部署 → 基础用法 → 高级功能 → 实战案例 → 最佳实践 → 常见问题 → 总结展望二、核心概念解析2.1 基本定义概念一requests 是什么requests是 Python 生态最流行、最简洁、最稳定的第三方 HTTP 请求库。完全封装 HTTP 协议支持 HTTPS、Cookie、Session、代理、超时、文件上传等全功能。一行代码发送请求自动编码、自动解码、自动管理连接代码量比 urllib 少 80%。概念二HTTP 请求基础表格概念说明URL资源地址如 https://www.baidu.com请求方法GET/POST/PUT/DELETE/HEAD 等请求头HeadersUser-Agent、Cookie、Content-Type请求参数paramsURL 参数、data表单、jsonJSON响应状态码200 成功、403 拒绝、404 不存在、500 服务器错误响应体text 文本、content 字节、json 自动解析2.2 关键术语解释⚠️注意以下术语是本章基础请务必掌握GET查询、获取数据安全、幂等、长度受限POST提交、创建数据适合表单、JSON、文件Session会话保持自动管理 CookieProxy代理 IP用于爬虫防封、突破地域限制Timeout超时设置防止程序卡死User-Agent客户端标识伪装浏览器必备Content-Type数据类型form-data、json 等2.3 技术架构概览架构理解plaintext┌─────────────────────────────────────────┐ │ 应用层爬虫 / 接口测试 / 数据采集 / AI │ └───────────────────────┬─────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ requests核心库统一API、自动管理 │ ├─────────────┬─────────────┬─────────────┤ │ 请求封装 │ 响应解析 │ 会话管理 │ ├─────────────┼─────────────┼─────────────┤ │ 代理配置 │ 超时控制 │ 文件传输 │ └─────────────┴─────────────┴─────────────┘ ↓ ┌─────────────────────────────────────────┐ │ 传输层TCP/HTTP/HTTPS │ └─────────────────────────────────────────┘三、技术原理深入3.1 核心工作原理构建请求对象自动处理 URL、参数、请求头、方法。建立连接自动管理连接池提升并发效率。发送数据自动编码参数、表单、JSON、文件。接收响应自动解压、自动解码、自动解析。返回 Response提供 text/content/json/headers 等统一访问方式。一句话requests 把复杂的网络请求变成简单的函数调用。3.2 数据交互机制标准流程请求 → 处理 → 响应 → 解析plaintext用户传入URL/参数/headers → requests封装HTTP请求 → 发送到服务器 → 服务器处理并返回响应 → requests自动解析 → 开发者获取结构化数据3.3 性能优化策略| 优化方向 | 具体方法 | 效果 ||---|---|| 会话复用 | 使用 Session () | 减少握手提升 30% 速度 || 连接池 | 内置自动管理 | 高并发下显著提速 || 超时设置 | 必加 timeout | 避免程序阻塞 || 流式读取 | streamTrue | 大文件不占内存 || 重试机制 | 配合 tenacity | 提高稳定性 |四、环境准备安装与快速入门4.1 安装依赖创建requirements.txt工程化规范txtrequests2.31.0 lxml4.9.3执行安装bash运行pip install -r requirements.txt # 或直接安装 pip install requests4.2 第一个 requests 程序python运行# demo.py import requests # 发送GET请求 url https://httpbin.org/get resp requests.get(url) # 输出信息 print(状态码, resp.status_code) print(响应文本\n, resp.text) print(JSON解析\n, resp.json())运行结果plaintext状态码200 响应文本{...} JSON解析{...}五、基础用法精讲5.1 七大请求方法python运行import requests # 1. GET最常用 resp requests.get(url, params{}, headers{}) # 2. POST提交数据 resp requests.post(url, data{}, json{}) # 3. PUT更新 resp requests.put(url, data{}) # 4. DELETE删除 resp requests.delete(url) # 5. HEAD仅响应头 resp requests.head(url) # 6. OPTIONS查询支持的方法 resp requests.options(url) # 7. PATCH局部更新 resp requests.patch(url)5.2 Response 对象核心属性python运行resp requests.get(https://httpbin.org/get) resp.status_code # 状态码 resp.text # 字符串文本 resp.content # 字节数据图片/文件 resp.json() # 自动解析JSON接口必备 resp.headers # 响应头 resp.url # 最终URL resp.encoding # 编码 resp.cookies # Cookie5.3 GET 请求带参数python运行# get_params.py import requests url https://httpbin.org/get params { name: python, age: 20, page: 1 } headers { User-Agent: Mozilla/5.0 } resp requests.get(url, paramsparams, headersheaders) print(resp.url)5.4 POST 请求表单 / JSON表单格式form-datapython运行resp requests.post(url, data{user: test, pwd: 123})JSON 格式现代接口标准python运行resp requests.post(url, json{id: 1, score: 100})六、高级功能实战6.1 会话保持Sessionpython运行# session_demo.py import requests # 创建会话 session requests.Session() # 登录自动保存Cookie login_data {username: admin, password: 123456} session.post(https://httpbin.org/post, jsonlogin_data) # 访问需要登录的接口 resp session.get(https://httpbin.org/get) print(resp.text) session.close()6.2 文件上传python运行# upload.py import requests url https://httpbin.org/post files { avatar: open(test.jpg, rb) } resp requests.post(url, filesfiles) print(resp.json())6.3 代理 IP 配置python运行# proxy.py import requests proxies { http: http://127.0.0.1:7890, https: http://127.0.0.1:7890 } resp requests.get(https://httpbin.org/ip, proxiesproxies) print(resp.text)6.4 超时设置必加python运行# 连接超时3秒读取超时7秒 resp requests.get(url, timeout(3, 7))6.5 大文件流式下载python运行# download.py import requests url https://example.com/file.zip with requests.get(url, streamTrue) as resp: with open(file.zip, wb) as f: for chunk in resp.iter_content(chunk_size8192): f.write(chunk)七、实战应用指南7.1 应用场景分析✅核心场景爬虫数据采集爬取网页、新闻、商品、小说接口自动化测试自动化验证接口功能AI 数据获取采集数据集、对接 AI 开放平台后端服务对接对接第三方支付、短信、OCR 等自动化办公自动上报、自动下载、自动发送7.2 实施步骤详解步骤一需求分析目标 URL 是什么请求方法 GET/POST是否需要登录、请求头、Cookie响应格式 HTML/JSON步骤二技术选型plaintext## requests技术选型清单 - [ ] GET/POST 请求 - [ ] 请求头伪装 - [ ] Session会话 - [ ] 代理IP - [ ] 超时控制 - [ ] 异常捕获 - [ ] JSON/文本解析步骤三开发实现表格任务说明导入库import requests构造参数params/data/json构造请求头User-Agent 必加发送请求get/post解析响应json() / text异常处理try-except7.3 最佳实践分享经验总结必须加 User-Agent否则极易被拦截必须加 timeout防止程序卡死优先使用 Session提升性能并保持登录用.get () 获取字典值避免崩溃统一异常处理保证程序健壮爬虫必须控制频率不要恶意攻击八、完整实战案例案例一接口自动化测试python运行# api_test.py import requests class APITest: def __init__(self): self.base_url https://httpbin.org self.session requests.Session() self.session.headers.update({ User-Agent: Python-API-Client, Content-Type: application/json }) def test_get(self): url f{self.base_url}/get resp self.session.get(url, timeout5) assert resp.status_code 200 print(GET接口测试通过) def test_post(self): url f{self.base_url}/post data {msg: hello requests} resp self.session.post(url, jsondata, timeout5) assert resp.status_code 200 print(POST接口测试通过) if __name__ __main__: test APITest() test.test_get() test.test_post()案例二简易网页爬虫python运行# spider.py import requests from bs4 import BeautifulSoup def spider(): url https://www.baidu.com headers {User-Agent: Mozilla/5.0} resp requests.get(url, headersheaders, timeout5) resp.encoding utf-8 soup BeautifulSoup(resp.text, lxml) print(标题, soup.title.text) if __name__ __main__: spider()九、常见问题解答9.1 技术问题Q1中文乱码如何解决python运行resp.encoding utf-8 # 或自动识别 resp.encoding resp.apparent_encodingQ2403 Forbidden 怎么办添加User-Agent添加Referer使用 Session更换代理 IPQ3如何捕获请求异常python运行from requests.exceptions import * try: resp requests.get(url, timeout5) resp.raise_for_status() except ConnectionError: print(网络错误) except Timeout: print(请求超时) except Exception as e: print(异常, e)9.2 应用问题Q4如何保持登录状态→ 使用requests.Session()自动管理 Cookie。Q5如何大规模爬取不被封加延时time.sleep(1)使用代理 IP 池随机 User-Agent控制并发量十、未来发展趋势10.1 技术趋势表格趋势说明异步请求aiohttp/httpx 成为高并发主流AI 爬虫AI 自动解析页面、自动提取数据指纹对抗浏览器指纹、JA3 指纹对抗技术低代码爬虫可视化爬虫工具普及10.2 职业发展对于 Python 开发者初级掌握 requests 基础请求中级能写爬虫、接口自动化高级高并发、分布式、反爬对抗专家架构设计、数据平台、AI 采集十一、本章小结11.1 核心要点回顾✅本章核心内容①requests是 Python 最流行 HTTP 库极简 API、全功能支持。② 核心流程get/post→resp.text/json→ 数据提取。③ 工程必备请求头、Session、超时、异常、代理。④ 两大场景爬虫采集、接口测试全覆盖。11.2 学习建议① 先跑通基础代码再练高级功能② 每天写 1 个小接口 / 小爬虫案例③ 结合 bs4/lxml 完成完整采集流程④ 学习异常处理写出稳定代码11.3 下一章预告下一章我们将学习BeautifulSoup4bs4HTML/XML 解析实现从网页中精准提取数据打造完整爬虫体系。十二、课后练习使用 requests 发送 GET/POST 请求打印状态码与响应。用 Session 模拟登录并访问需要登录的页面。写一个爬虫爬取任意新闻网站的标题与链接。写一个接口测试用例包含异常处理。十三、参考资料官方文档https://requests.readthedocs.io/MDN HTTP 文档Python 网络编程实战爬虫开发与反爬技术✍️ 坚持用清晰易懂的图解 可落地的代码让每个知识点都简单直观 座右铭“道路是曲折的前途是光明的”

更多文章