当前位置: 首页 > news >正文

【Python】网络请求与数据获取:Requests库的使用与技巧


网络请求与数据获取:Requests 库的使用与技巧

在现代 Web 开发与数据科学工作中,从 API、网页或服务端获取数据是非常常见的任务,而 Python 的 Requests 库为此提供了便捷且功能强大的工具。本文将从基本的 HTTP 请求操作出发,结合常见的数据获取需求,深入讲解 Requests 的使用技巧,让您更高效地实现网络数据获取任务。
在这里插入图片描述

一、Requests 库简介

Requests 是 Python 中广泛使用的 HTTP 请求库之一,它的设计哲学是简单优雅,让开发者能够快速发起 HTTP 请求。通过 Requests,您可以轻松地发送 GET、POST、PUT、DELETE 等请求,并获得结构化的响应数据。

安装 Requests

在使用 Requests 之前,需要通过以下命令进行安装:

pip install requests

在这里插入图片描述

二、基础用法

1. 发送 GET 请求

最基本的请求是 GET 请求,用于从服务器获取数据。通过 requests.get() 可以直接发送 GET 请求并获取响应内容。

import requestsurl = 'https://jsonplaceholder.typicode.com/posts'
response = requests.get(url)# 打印响应状态码
print(response.status_code)# 打印返回的 JSON 数据
print(response.json())
  • response.status_code:返回响应的状态码,200 表示成功,404 表示未找到等。
  • response.json():将 JSON 响应转换为 Python 字典。

2. 发送 POST 请求

POST 请求一般用于提交数据。通过 requests.post() 可以传入数据发送 POST 请求。

data = {'title': 'foo', 'body': 'bar', 'userId': 1}
response = requests.post(url, json=data)print(response.status_code)
print(response.json())

在这里插入图片描述

三、请求参数与 Headers 设置

在真实应用中,HTTP 请求往往需要带有请求参数或自定义的请求头,Requests 提供了便捷的方法来实现。

1. URL 请求参数

在 GET 请求中,可以通过 params 参数传递查询参数,Requests 会自动将其编码为 URL 的查询字符串。

params = {'userId': 1}
response = requests.get(url, params=params)print(response.url)  # https://jsonplaceholder.typicode.com/posts?userId=1
print(response.json())

2. 请求 Headers

通过 headers 参数设置自定义的请求头,例如伪装成浏览器或指定 API 的认证密钥。

headers = {'User-Agent': 'Mozilla/5.0', 'Authorization': 'Bearer YOUR_API_TOKEN'}
response = requests.get(url, headers=headers)print(response.json())

3. 发送带有 Cookie 的请求

如果需要登录或保持会话,可以使用 cookies 参数来传递 Cookie。

cookies = {'session_id': '123456789'}
response = requests.get(url, cookies=cookies)print(response.json())

在这里插入图片描述

四、文件上传与下载

1. 文件上传

通过 POST 请求上传文件,可以使用 files 参数。

file_path = 'path/to/your/file.txt'
files = {'file': open(file_path, 'rb')}
response = requests.post(url, files=files)print(response.status_code)
print(response.json())

2. 文件下载

获取文件数据并将其保存到本地文件,适用于下载图片、PDF 文件等。

file_url = 'https://example.com/image.jpg'
response = requests.get(file_url)with open('downloaded_image.jpg', 'wb') as file:file.write(response.content)

response.content 返回字节内容,可以直接写入二进制文件。
在这里插入图片描述

五、处理超时和重试

网络请求中经常会遇到超时或连接失败等问题。Requests 提供了超时参数 timeout 和重试机制来更好地处理这些情况。

1. 设置请求超时

设置 timeout 可以避免请求长时间挂起,timeout 参数接受秒数作为值:

try:response = requests.get(url, timeout=5)print(response.json())
except requests.exceptions.Timeout:print("请求超时,请检查网络或服务状态")

2. 使用重试机制

在一些网络不稳定或服务偶尔会失败的情况下,可以使用 requests.adapters.HTTPAdapter 配合 Retry 实现自动重试。

from requests.adapters import HTTPAdapter, Retrysession = requests.Session()
retries = Retry(total=5, backoff_factor=0.2, status_forcelist=[500, 502, 503, 504])
session.mount('http://', HTTPAdapter(max_retries=retries))response = session.get(url)
print(response.status_code)
  • total=5:重试次数为 5 次。
  • backoff_factor=0.2:重试间隔时间倍增,形成指数退避。
  • status_forcelist:设置哪些 HTTP 状态码触发重试。
    在这里插入图片描述

六、Session 会话保持

Requests 提供了 Session 对象,可以保持会话状态,比如自动保存并携带 Cookie 以实现登录后连续访问。

session = requests.Session()# 第一次请求登录,保存登录后的 Cookie
login_data = {'username': 'user', 'password': 'pass'}
session.post('https://example.com/login', data=login_data)# 第二次请求访问需要登录的页面
response = session.get('https://example.com/dashboard')
print(response.json())

使用 Session 后,第二次请求会自动携带登录后的 Cookie 和会话信息,便于后续访问。
在这里插入图片描述

七、SSL 证书验证与代理设置

1. 忽略 SSL 证书验证

在请求 HTTPS 时,可以通过 verify=False 忽略 SSL 证书,适用于本地测试或不需要验证证书的场景:

response = requests.get(url, verify=False)

⚠️ 注意:忽略 SSL 证书存在安全风险,不推荐在生产环境使用。

2. 设置代理

通过代理访问网络,适用于网络封锁、限流等场景。

proxies = {'http': 'http://10.10.1.10:3128','https': 'https://10.10.1.10:1080',
}
response = requests.get(url, proxies=proxies)
print(response.json())

在这里插入图片描述

八、处理复杂 JSON 响应

当接口返回的 JSON 数据较为复杂时,可以使用 Python 的字典和列表操作对其进行解析。

response = requests.get(url)
data = response.json()# 假设 data 是一个包含嵌套数据的字典
for item in data['items']:print(f"ID: {item['id']}, Name: {item['name']}")

在处理复杂数据时,熟练掌握字典和列表的解析方法,可以有效提取有用信息。
在这里插入图片描述

总结

Requests 是一个功能强大且简单易用的 HTTP 请求库,在数据获取与接口请求中提供了极大的便利。本文介绍了 Requests 的基础操作和多种高级用法,包括请求参数、文件处理、超时重试、会话保持等技巧,能够帮助您轻松应对不同的网络请求场景。在掌握这些内容后,您就可以利用 Requests 库高效地获取和处理网络数据,为开发自动化数据采集、接口调用等任务提供支持。
在这里插入图片描述


http://www.mrgr.cn/news/63264.html

相关文章:

  • StringBuilder为何比String节省效率
  • Elasticsearch开源仓库404 7万多star一夜清零
  • 《Mini-internVL》论文阅读:OpenGVLab+清华/南大等开源Mini-InternVL | 1~4B参数,仅用5%参数实现90%性能
  • 园区网典型技术应用
  • 几种基础的激活函数及其实现
  • 鸿道Intewell Developer介绍
  • React.js教程:从JSX到Redux的全面解析
  • Vision - 开源视觉分割算法框架 Grounded SAM2 配置与推理 教程 (1)
  • 洪水风险评估——洪水制图
  • 三色激光投影仪推荐:一篇文章盘点三色激光投影仪的优劣处
  • 基于JavaSpringMVC+Mybatis+Jquery高校毕业设计管理系统设计和实现
  • 沈阳乐晟睿浩科技有限公司抖音小店短视频时代的电商蓝海
  • 网络爬虫中的反爬虫技术:突破限制,获取数据
  • VUE3——readonly与shallowReadonly
  • 本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——8ResNet模型的使用
  • 力扣(leetcode)每日一题 3259 超级饮料的最大强化能量|动态规划
  • Python实现XGBoost-MLP分类模型项目实战
  • Python零基础 [2.5] 判断语句嵌套的详解与示例
  • 面试遇到的问题
  • 【笔记】KV-cache
  • 如何实现PLC系统时钟显示在HMI上?
  • 地下隧道、管廊非接触式二维位移监测裂纹、衬砌、支护结构损伤识别、隧道病害诊断等问题解决方式——变焦视觉位移监测仪
  • C++初阶(八)--初识模板
  • 制作一个简易恒流电子负载教程,实战教程,单片机程序,电路图,方案
  • 基于字符的图片验证码识别算法的设计与实现
  • springcloud通过MDC实现分布式链路追踪