首页 > 编程语言 >【Python】网络请求与数据获取:Requests库的使用与技巧

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

时间:2024-11-01 11:45:46浏览次数:5  
标签:请求 Python response url print Requests 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 requests

url = '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, Retry

session = 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 库高效地获取和处理网络数据,为开发自动化数据采集、接口调用等任务提供支持。
在这里插入图片描述

标签:请求,Python,response,url,print,Requests,requests,技巧
From: https://blog.csdn.net/liaoqingjian/article/details/143428221

相关文章

  • python 计算 sin 值
    概述当角(弧度描述)x足够小时,sin(x)约等于x,而已知三角等式sin(x)=3sin(x/3)-4sin^3(x/3),用python语言计算任意大的弧度角的sin值实现可以利用给定的三角恒等式[\sin(x)=3\sin\left(\frac{x}{3}\right)-4\sin^3\left(\frac{x}{3}\right)]来递归地计算任意弧度......
  • 使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
    本人之前对C#开发非常喜欢,也从事开发C#开发桌面开发、Web后端、Vue前端应用开发多年,最近一直在研究使用Python,希望能够把C#的一些好的设计模式、开发便利经验引入到Python开发中,很多时候类似的开发方式,可以极大提高我们开发的效率,本篇随笔对wxpython控件实现类似C#扩展函数处理的......
  • 【含文档+PPT+源码】基于Python校园跑腿管理系统设计与实现
    项目介绍本课程演示的是一款基于Python校园跑腿管理系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料2.带你从零开始部署运行本套系统3.该项目附带的源码资料可作为......
  • 【粒子群优化算法】基于Schwefel‘s P2.21函数的PSO算法变体性能分析(附完整算法Python
    基于Schwefel'sP2.21函数的PSO算法变体性能分析(附完整算法Python代码)摘要1.引言1.1研究目的2.算法与测试函数2.1Schwefel'sP2.21函数2.2PSO算法变体2.2.1标准PSO(SPSO)2.2.2自适应PSO(APSO)2.2.3改进的带变异PSO(IPSOM)2.2.4混合PSO(HPSO)3.实验设计3.......
  • SQL优化的35个小技巧
    避免使用SELECT*,使用具体字段反例:SELECT*FROMemployee;正例:SELECTid,name,ageFROMemployee;使用具体字段可以节省资源、减少网络开销,且能避免回表查询。避免在WHERE子句中使用OR反例:SELECT*FROMuserWHEREuserid=1ORage=18;正例:--使用UNION......
  • 【Python实例】hdf文件简介及基于Python导入hdf文件
    【Python实例】hdf文件简介及基于Python导入hdf文件.hdf文件概述hdf工具-HDFView基于Python导入hdf文件实例1:判断是否为hdf文件实例2:打开并读取hdf4文件(地面反照率数据)实例3:绘制图形(地面反照率数据)参考HDF(HierarchicalDataFormat)是一种用于存储和组织大量数据的文......
  • python使用魔法函数__getitem__实现字典和列表式访问自定义类型
    起因想起C++可以实现运算符重载,以实现以数组的方式([])访问我们的类.我想要实现一个类,可以同时用类似于字典和就想到python能不能实现这个效果,而且显然是可以的,不然numpy是怎么实现属于自己的数组的?#期望实现效果classmyclass: passc=myclass()#像这样使用[]访......
  • Python中的文件I/O操作
    在Python编程中,文件I/O(输入/输出)是一个重要的主题,涉及如何读取和写入文件。无论是处理文本文件还是二进制文件,Python提供了简洁易用的接口。本文将介绍如何在Python中进行文件I/O操作,包括读取、写入和文件处理的最佳实践。文件打开与关闭在Python中,使用内置的open()函数打开......
  • 使用Python和Selenium获取BOOS直聘职位信息
    文章目录引言环境准备网页分析代码解析1.导入必要的库2.定义爬虫类3.启动浏览器4.主要爬取逻辑5.提取职位信息6.保存数据到CSV7.初始化CSV文件8.清理和整理CSV数据9.全部代码结语引言在当今就业比较困难,很多人对于要投递的岗位相关行业信息不了解,如果有招......
  • Python中类的三个方法
    在Python中,类有三种常用的方法,以及相应的装饰器。下面是它们的详细介绍:1.类的方法实例方法(InstanceMethod)实例方法是类中定义的常规方法,第一个参数通常是self,指代实例本身。实例方法可以访问和修改实例的属性。pythonclassMyClass:definstance_method(sel......