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

Python requests模块 快速入门 这篇就够了

目录

一、Requests概述

二、安装Requests

三、Get请求

3.1 Get请求示例

3.2 Get请求爬取二进制数据

四、Post请求

4.1 Post请求示例

4.2 发送JSON数据

五、验证Cookies

六、会话请求


一、Requests概述

Requests是一个流行的Python第三方库,它专为HTTP通信而设计,旨在使网络请求更加简单和人性化。以下是关于Requests的概述:

  1. 简单易用:Requests提供了简洁明了的API,使得发送HTTP请求变得非常直观。与Python标准库中的urllib相比,Requests的语法更加简洁,易于学习和使用。
  2. 功能全面:Requests支持HTTP的所有主要方法,如GET、POST、PUT、DELETE等。它还支持设置请求头、请求体、超时时间、代理等。此外,Requests还支持会话保持、文件上传、自动内容解码和JSON解析等功能。
  3. 自动化处理:Requests库内部处理了许多底层的细节,如连接池管理、Keep-alive连接、URL编码等,使得开发者可以专注于业务逻辑而无需关心底层的HTTP通信细节。
  4. 良好的文档和社区支持:Requests拥有详尽的官方文档和活跃的社区,这意味着开发者可以轻松地找到问题的答案或获得帮助。
  5. 兼容性:Requests库在Python 2和Python 3中都可以使用,并且与许多其他Python库和框架兼容。
  6. 安全:Requests在处理HTTPS请求时提供了SSL验证和证书管理功能,确保通信的安全性。

二、安装Requests

确保你已经安装了Requests库。如果还没有安装,可以使用pip进行安装

pip install requests

三、Get请求

3.1 Get请求示例

这个示例中,我们定义了请求的URL、查询参数和请求头。然后,我们使用requests.get()方法发送GET请求,并获取响应对象。接着,我们检查响应的状态码以确保请求成功,并输出请求的URL、状态码和响应内容。如果服务器返回的是JS ON数据,我们还尝试解析它并打印出来。

请注意,你需要将urlparamsheaders替换为你实际要发送请求的目标URL、查询参数和请求头信息。此外,处理响应时,你可能需要根据实际情况调整代码,以正确处理服务器返回的数据。 

示例:

import requests# 定义请求的URL
url = 'https://www.baidu.com'# 定义查询参数
params = {'key1': 'shenghao','key2': 'haozi'
}# 定义请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}# 发送GET请求
response = requests.get(url, params=params, headers=headers)# 检查请求是否成功
if response.status_code == 200:# 输出请求URLprint('请求URL:', response.url)# 输出响应状态码print('状态码:', response.status_code)# 输出响应内容(文本格式)print('文本响应内容:', response.text)# 如果你知道服务器返回的是JSON数据,可以解析它try:data = response.json()print('JSON响应内容:', data)except ValueError:print('响应内容不是有效的JSON格式')else:# 如果请求失败,打印错误信息print('请求失败,状态码:', response.status_code)print('错误信息:', response.reason)# 你还可以获取其他响应信息,如编码方式和内容长度
print('响应编码:', response.encoding)
print('内容长度:', len(response.content))

3.2 Get请求爬取二进制数据

使用 Requests 库从 URL 下载二进制数据(例如,一个图片文件)

示例:

import requests# 图片文件的URL
url = 'https://www.baidu.com/img/bd_logo1.png'# 发送GET请求,获取二进制响应内容
response = requests.get(url, stream=True)# 检查请求是否成功
if response.status_code == 200:# 以二进制格式打开本地文件用于写入with open('image.jpg', 'wb') as file:# 使用iter_content方法按块读取响应内容,减少内存使用for chunk in response.iter_content(chunk_size=8192):if chunk:  # 过滤掉空块file.write(chunk)print('图片下载成功!')
else:print('请求失败,状态码:', response.status_code)

四、Post请求

4.1 Post请求示例

示例:

import requests# 定义请求的URL
url = 'https://httpbin.org/post'# 定义要提交的表单数据
form_data = {'username': 'shenghao','password': 'haozi'
}# 设置请求头,通常不需要特别设置,但有时候可能需要
headers = {'Content-Type': 'application/x-www-form-urlencoded'
}# 发送POST请求
response = requests.post(url, data=form_data, headers=headers)# 检查请求是否成功
if response.status_code == 200:# 输出响应内容print('请求成功!')print('响应内容:', response.text)
else:# 如果请求失败,打印错误信息print('请求失败,状态码:', response.status_code)print('错误信息:', response.reason)# 还可以打印出服务器返回的错误信息,如果有的话if response.text:print('服务器返回的错误信息:', response.text)

4.2 发送JSON数据

通过POST请求发送JSON数据,你需要设置Content-Type头为application/json,并将数据编码为JSON格式

示例:

import requests
import json# 定义请求的URL
url = 'https://httpbin.org/post'# 定义要提交的JSON数据
json_data = {'username': 'shenghao','password': 'haozi'
}# 将Python字典转换为JSON字符串
json_string = json.dumps(json_data)# 设置请求头
headers = {'Content-Type': 'application/json'
}# 发送POST请求
response = requests.post(url, data=json_string, headers=headers)# 检查请求是否成功
if response.status_code == 200:# 输出响应内容print('请求成功!')print('响应内容:', response.json())  # 假设服务器返回的是JSON格式的数据
else:# 如果请求失败,打印错误信息print('请求失败,状态码:', response.status_code)print('错误信息:', response.reason)# 还可以打印出服务器返回的错误信息,如果有的话if response.text:print('服务器返回的错误信息:', response.text)

五、验证Cookies

使用cookies进行登录验证通常涉及以下步骤:

  1. 通过用户名和密码发送登录请求到服务器。
  2. 服务器验证用户名和密码,如果验证成功,会设置一个或多个cookies,并将其发送给客户端。
  3. 客户端在接下来的请求中携带这些cookies,以证明用户的登录状态。

示例:

import requests# 登录URL
login_url = 'https://httpbin.org/post'
# 目标URL(需要登录后才能访问)
target_url = 'https://example.com/protected-resource'# 登录时所需的数据
login_data = {'username': 'shenghao','password': 'haozi'
}# 第一步:发送登录请求
login_response = requests.post(login_url, data=login_data)# 假设登录成功,服务器会设置cookies
# 我们从登录响应中获取这些cookies
if login_response.status_code == 200:# 获取cookiescookies = login_response.cookies.get_dict()# 第二步:使用获取到的cookies发送请求到目标URLtarget_response = requests.get(target_url, cookies=cookies)# 打印目标URL的响应内容print(target_response.text)
else:print("登录失败,状态码:", login_response.status_code)

六、会话请求

Session对象提供了一种方式来跨多个请求保持某些参数和cookies。当你需要向同一网站发送多个请求,并且这些请求之间需要共享某些状态(比如cookies或认证信息)时,使用Session是非常有用的。

示例:

import requests# 创建一个Session对象
s = requests.Session()# 使用Session对象发送第一个请求(例如登录)
login_url = 'https://httpbin.org/post'
login_data = {'username': 'shenghao', 'password': 'haozi'}
login_response = s.post(login_url, data=login_data)# 检查登录是否成功
if login_response.status_code == 200:print('登录成功!')
else:print('登录失败,状态码:', login_response.status_code)# 发送第二个请求(需要身份验证的资源)
protected_url = 'https://httpbin.org/get'
protected_response = s.get(protected_url)# 由于Session对象自动处理cookies,所以不需要手动设置cookies
# 检查受保护资源的请求是否成功
if protected_response.status_code == 200:print('访问受保护资源成功!')print('响应内容:', protected_response.text)
else:print('访问受保护资源失败,状态码:', protected_response.status_code)# 关闭Session(可选,因为Session对象会在Python对象被垃圾回收时自动关闭)
s.close()

相关文章:

Python requests模块 快速入门 这篇就够了

目录 一、Requests概述 二、安装Requests 三、Get请求 3.1 Get请求示例 3.2 Get请求爬取二进制数据 四、Post请求 4.1 Post请求示例 4.2 发送JSON数据 五、验证Cookies 六、会话请求 一、Requests概述 Requests是一个流行的Python第三方库,它专为HTTP通信…...

【VTKExamples::PolyData】第二十三期 InterpolateMeshOnGrid

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例InterpolateMeshOnGrid,并解析接口vtkProbeFilter 、vtkWarpScalar & vtkDealuany2D等多个接口,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!…...

大数据术语系列(1)——COW和MOR,我如何使用chatgpt通俗易懂地理解了hudi这两种表类型

从传统数据库到大数据的转变,首当其冲的是各种术语的理解。 所以我与chatgpt发生了一系列对话,以便于我能快速理解这些术语。 我先把汇总的结果放在前边,后边会一步步地来说明我是如何获取这些信息的。前边我也发过一些关于chatgpt提示词相…...

蓝桥杯基础知识7 vector

蓝桥杯基础知识7 vector vector 的定义和特性&#xff1a;在C中&#xff0c;vector是一个动态数组容器&#xff0c;可以存储一系列相同类型的元素。 vector 是一个模板类&#xff0c;使用之前包含头文件<vector>&#xff0c;声明一个vector对象vec&#xff0c;T是存储在v…...

【Java万花筒】加速Java应用程序:探索性能优化的利器

Java性能优化&#xff1a;提升应用程序效率与可靠性的关键 前言 在当今软件开发领域中&#xff0c;性能是一个至关重要的方面。对于Java应用程序而言&#xff0c;优化其性能可以带来更高的效率和更好的用户体验。本文将介绍一些常用的Java性能优化库和工具&#xff0c;帮助开…...

c++ STL系列——(四)queue

在C中&#xff0c;标准模板库&#xff08;STL&#xff09;提供了许多容器和算法&#xff0c;其中之一便是queue。queue是一个先进先出&#xff08;FIFO&#xff09;的数据结构&#xff0c;它允许在队列的末尾添加元素&#xff0c;并从队列的开头移除元素。本文将深入探讨C STL中…...

2.10日学习打卡----初学RocketMQ(一)

2.10日学习打卡 对于MQ(Message queue)消息队列的一些解释可以看我原来写的文章 初学RabbitMQ 各大MQ产品比较 一.RocketMQ概述 发展历程 RocketMQ概念术语 生产者和消费者 生产者负责生产消息&#xff0c;一般由业务系统负责生产消息&#xff0c;消费者即后台系统&…...

Window中出现 结束服务又自动重启的解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法前言 长期使用Linux操作系统,对于Window进程如何关闭开启,推荐阅读:Window命令行 如何查看以及关闭进程 而现在遇到进程无法强制kill,过一会自动启动! 对这种方式如何强制关闭,可看下文 1. 问题所示 起初在驱动某个服务的…...

Bee V2.2 分库分表 Sharding+MongoDB ORM 稳定版发布 (更新 Maven)

Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鸿蒙) Bee 小巧玲珑&#xff01;仅 860K, 还不到 1M, 但却是功能强大&#xff01; V2.2 (2024.1.1・LTS 版) 1.Javabean 实体支持继承 (配置 bee.osql.openEntityCanExtendtrue) 2. 增强批…...

机器学习系列——(十五)随机森林回归

引言 在机器学习的众多算法中&#xff0c;随机森林以其出色的准确率、对高维数据的处理能力以及对训练数据集的异常值的鲁棒性而广受欢迎。它是一种集成学习方法&#xff0c;通过构建多个决策树来进行预测和分类。本文将重点介绍随机森林在回归问题中的应用&#xff0c;即随机…...

【概念板块统计】股票板块一览表 股票概念一览表

一、什么叫股票概念板块 股票概念板块是指具有某种特别产品类型&#xff08;例如5G概念&#xff0c;光刻机概念&#xff09;、服务类型&#xff08;如乡村振兴概念、养老概念&#xff09;或事件类型&#xff08;如重组概念、港股通概念、扭亏概念)的股票组成的群体。这些类型通…...

c#通过反射完成对象自动映射

在 C# 中&#xff0c;可以使用 AutoMapper 库来完成对象之间的映射&#xff0c;而不必手动编写显式的映射代码。但是&#xff0c;如果你希望通过反射来动态完成对象的映射&#xff0c;你可以编写自己的映射逻辑并使用反射来完成这个过程。 下面是一个简单的示例&#xff0c;演…...

ef core原始sql查询

ef core用原始sql查询&#xff0c;不能自动映射到类型中。 处理主要是将sql查询结果转换为json&#xff0c;然后再将json转换为类型对象 public async Task<List<Warning_log>> GetStatData(){string sql "SELECT CONVERT(date, [trigger_time]) as tr…...

2024 CKS 题库 | 4、RBAC - RoleBinding

CKS 题库 4、RBAC - RoleBinding Context 绑定到 Pod 的 ServiceAccount 的 Role 授予过度宽松的权限。完成以下项目以减少权限集。 Task 一个名为 web-pod 的现有 Pod 已在 namespace db 中运行。 编辑绑定到 Pod 的 ServiceAccount service-account-web 的现有 Role&#…...

Docker Compose实例

目录 一、前提说明 二、简单的Docker容器部署案例 1. Dockerfile 配置 2. docker-compose.yml 配置 3. application-prod.properties 配置 4. pom.xml 配置 5. 上传文件 6. 创建基础Docker镜像 7. docker-compose.yml编排 8. 停止并删除容器编排 三、案例地址 一、前…...

Mac上新版InfluxDB使用教程

一、简介 官网&#xff1a;influxdb 二、influxdb安装 建议使用Homebrew在 macOS 上安装 InfluxDB v2&#xff1a; brew install influxdb启动influxdb服务&#xff1a;brew services start influxdb 停止influxdb服务&#xff1a;brew services stop influxdb 查看是否启…...

性能篇:网络通信优化之序列化

嗨,小米的朋友们!欢迎回到小米的技术分享空间。今天,我们将深入探讨网络通信中一个不可忽视的重要环节——序列化。废话不多说,让我们一起来揭开序列化的神秘面纱! 背景 序列化作为计算机领域中重要的概念,其存在背景根植于分布式系统和跨语言通信的需求。随着信息技术…...

【UE 游戏编程基础知识】

目录 0 引言1 基础知识1.1 拓展&#xff1a;3D数学和计算机图形学的关系 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x1f4a5; 标题&#xff1a;【UE 游戏编程基础知识】❣️ 寄语&#xff1a;书到用时方恨少&#xff0c;事…...

原语,原子,线程安全

原子操作和原语是计算机科学中常见的概念&#xff0c;通常用于多线程或多进程环境中&#xff0c;以确保数据的一致性和同步。 原子操作&#xff08;Atomic Operations&#xff09; 原子操作是不可再分的操作&#xff0c;在执行完毕之前不会被线程调度系统中断的操作。从外部看…...

fast.ai 机器学习笔记(一)

机器学习 1&#xff1a;第 1 课 原文&#xff1a;medium.com/hiromi_suenaga/machine-learning-1-lesson-1-84a1dc2b5236 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这些笔记将继续更…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...