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

Python requests模块

一、requests模块简介

requests模块是一个第三方模块,需要在python环境中安装:

pip install requests

该模块主要用来发送 HTTP 请求,requests 模块比 urllib 模块更简洁。

requests模块支持:

  • 自动处理url编码
  • 自动处理post请求参数
  • 支持文件上传
  • 支持自动响应内容的编码
  • 自动实现持久连接keep-alive
  • 简化cookie和代理操作等

1、基本步骤

requests模块使用的基本步骤:

# 导入模块
import requests# 目标url
url = 'https://www.baidu.com'# 向目标url发送请求方法。比如:get/post等
response = requests.get(url)# 打印响应内容
print(response.ok)  # True
print(response.status_code)  # 200
print(response.url)  # https://www.baidu.com/
print(response.apparent_encoding)  # utf-8
print(response.text)
print(response.content.decode())

2、requests方法

requests的请求方法有:

在这里插入图片描述

参数说明:

  • method:请求方法。
  • url:请求url。
  • params:请求url参数。比如:get参数。
  • data:请求要发送到指定 url 的字典、元组列表、字节或文件对象等。比如:post参数数据。
  • json:请求要发送到指定 url 的 JSON 对象。比如:post参数数据。
  • args:请求其他属性参数。比如 cookies、headers、verify、timeout等。

常见 args请求属性如下:

  • headers:请求头。
  • cookies:请求cookies
  • timeout:设置响应超时时间。
  • verify:这是本次请求是否进行证书校验。

3、response对象

每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息。响应信息如下:

在这里插入图片描述

3.1 response.text和response.content 的区别

(1)response.text

response.text

  • 类型:str
  • 解码类型: requests模块自动根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码。

(2)response.content

response.content

  • 类型:bytes
  • 解码类型: 没有指定

通过对response.content指定decode,来解决中文乱码。

response.content.decode() # 默认utf-8response.content.decode('gbk') # 指定编码

二、get请求

get() 方法可以发送 GET 请求到指定 url,一般格式如下:

response = requests.get(url, params,args)

参数说明:

  • url参数:请求 url。
  • params:请求参数。比如:get参数。
  • args参数:请求其他属性参数,比如 cookies、headers、verify、timeout等。

1、不带参数请求

url = 'https://www.baidu.com'# 不带参数的get请求
response = requests.get(url)

2、带参数请求

2.1 url携带参数

url = 'https://www.baidu.com/?p1=python&p2=java'# url携带参数 get请求
response = requests.get(url)
print(response.url)  # https://www.baidu.com/?p1=python&p2=java

2.2 构建字典参数

url = 'https://www.baidu.com'
url_params = {'p1': 'python', 'p2': None, 'p3': 'java'}# url携带字典参数 get请求,如果值为None的键不会被添加到url中
response = requests.get(url, url_params)
print(response.url)  # https://www.baidu.com/?p1=python&p3=java

注意:字典传递参数,如果值为None的键都不会被添加到 url中。

三、post请求

post() 方法可以发送 POST 请求到指定 url,一般格式如下:

response = requests.post(url, data={key: value}, json={key: value}, args)

参数说明:

  • url参数:请求 url。
  • data参数:请求要发送到指定 url 的字典、元组列表、字节或文件对象等。
  • json参数:请求要发送到指定 url 的 JSON 对象。
  • args参数:请求其他属性参数,比如 cookies、headers、verify、timeout等。

1、表单参数请求

方式1:

url = 'https://www.baidu.com'
payload = {'key1': 'value1', 'key2': None, 'key3': 'value3'}# 表单参数请求
response = requests.post(url, data=payload)
print(response.url)  # https://www.baidu.com/
print(response.request.body) # key1=value1&key3=value3

注意:如果值为None的键都不会被传递。

方式2:

import requests
import jsonurl = 'https://www.baidu.com'
payload = {'key1': 'value1', 'key2': None, 'key3': 'value3'}
headers = {'content-type': 'application/json'}# 表单参数请求
response = requests.post(url, data=json.dumps(payload), headers=headers)
print(response.url)  # https://www.baidu.com/
print(response.request.body)  # {"key1": "value1", "key2": null, "key3": "value3"}
print(response.request.headers) # {'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'content-type': 'application/json', 'Content-Length': '50'}

注意:如果值为None的键都会被传递,值为null。

2、Json参数请求

url = 'https://www.baidu.com'
payload = {"key1": "value1", "key2": None, "key3": "value3", "key3": 33}
headers = {'content-type': 'application/json'}response = requests.post(url, json=payload, headers=headers)
print(response.url)  # https://www.baidu.com/
print(response.request.body)  # b'{"key1": "value1", "key2": null, "key3": 33}'
print(response.request.headers) # {'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'content-type': 'application/json', 'Content-Length': '44'}

3、添加请求属性参数实例

这里添加请求 timeout,cookies,headers。

url = 'https://www.baidu.com'
payload = {"key1": "value1", "key2": None, "key3": "value3", "key3": 33}
headers = {'content-type': 'application/json'}
cookies = {'testCookies_1': 'Hello_Python3', 'testCookies_2': 'Hello_Java'}try:response = requests.post(url, json=payload, headers=headers, cookies=cookies, timeout=5)if response.status_code != 200: # 如果响应状态码不是 200,就主动抛出异常print('响应失败:status_code = ' + str(response.status_code))print('响应失败:' + str(response.reason))else:print("=====================")print(response.url)  # https://www.baidu.com/print(response.request.body)  # b'{"key1": "value1", "key2": null, "key3": 33}'print(response.request.headers)  # {'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'content-type': 'application/json', 'Cookie': 'testCookies_1=Hello_Python3; testCookies_2=Hello_Java', 'Content-Length': '44'}print(response.request._cookies) # <RequestsCookieJar[<Cookie testCookies_1=Hello_Python3 for />, <Cookie testCookies_2=Hello_Java for />]>
except requests.RequestException as e:print("请求失败,异常信息e={}".format(e))
except:raise
finally:response.close()

四、利用requests.session请求

requests模块中的 Session类能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。

作用及场景:

  • 自动处理cookie,即下一次请求会带上前一次的cookie
  • 自动处理连续的多次请求过程中产生的cookie

示例代码如下:

import requests# 构造请求头字典
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36','content-type': 'application/json'
}
cookies = {'testCookies_1': 'Hello_Python3','testCookies_2': 'Hello_Java'
}# 构造请求参数字典
data = {'authenticity_token': 'authenticity_token','login': input('输入账号:'),'password': input('输入密码:')
}# 实例化session对象
session = requests.session()# 请求1
post_url = 'https://blog.csdn.net'
response1 = session.post(post_url, data=data, headers=headers, cookies=cookies)print("==========session.post===========")
print(response1.url)
print(response1.request.body)
print(response1.request.headers)
print(response1.request._cookies)
print(response1.cookies)# 请求2
get_url = 'https://blog.csdn.net'
# response2 = session.get(get_url, headers=headers)
response2 = session.get(get_url)print("==========session.get===========")
print(response2.url)
print(response2.request.body)
print(response2.request.headers)
print(response2.request._cookies)

在这里插入图片描述

– 求知若饥,虚心若愚。

相关文章:

Python requests模块

一、requests模块简介 requests模块是一个第三方模块&#xff0c;需要在python环境中安装&#xff1a; pip install requests 该模块主要用来发送 HTTP 请求&#xff0c;requests 模块比 urllib 模块更简洁。 requests模块支持&#xff1a; 自动处理url编码自动处理post请求…...

工业智能网关解决方案:物联网仓储环境监测系统

仓储是连接生产、供应和销售的中转系统&#xff0c;对于促进生产、提高效率有着重要的辅助作用。对于很多大型工厂或食品厂来说&#xff0c;需要对仓储环境进行严控的控制&#xff0c;以确保产品或食品的质量&#xff0c;避免不必要的产品损耗&#xff0c;提高产品存管的水平。…...

Linux进程线程管理

目录 存储管理 linux内存管理基本框架 系统空间管理和用户空间管理 进程与进程调度 进程四要素 用户堆栈的扩展 进程三部曲&#xff1a;创建&#xff0c;执行&#xff0c;消亡 系统调用exit(),wait() 内核中的互斥操作 存储管理 linux内存管理基本框架 系统空间管理…...

分享111个HTML电子商务模板,总有一款适合您

分享111个HTML电子商务模板&#xff0c;总有一款适合您 111个HTML电子商务模板下载链接&#xff1a;https://pan.baidu.com/s/1e8Wp1Rl9RaFrcW0bilIatg?pwdc97h 提取码&#xff1a;c97h Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 HTML5家居家具电子商务网…...

百度前端必会手写面试题整理

请实现一个 add 函数&#xff0c;满足以下功能 add(1); // 1 add(1)(2); // 3 add(1)(2)(3)&#xff1b;// 6 add(1)(2, 3); // 6 add(1, 2)(3); // 6 add(1, 2, 3); // 6function add(...args) {// 在内部声明一个函数&#xff0c;利用闭包的特性保存并收集…...

ubuntu 安装支持GPU的Docker详细步骤

安装依赖项 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common 添加 Docker GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerpr…...

usbmon+tcpdump+wireshark USB抓包

文章目录usbmon抓包及配合wireshark解析usbmon抓包及配合wireshark解析 usbmon首先编译为内核模块&#xff0c;然后通过modprobe usbmon加载到linux sys文件系统中 rootroot-PC:~# modprobe usbmon​ 而后 linux系统下安装 tcpdump rootroot-PC:~# apt-get install tcpdump​…...

【LeetCode】剑指 Offer 04. 二维数组中的查找 p44 -- Java Version

题目链接&#xff1a; https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 1. 题目介绍&#xff08;04. 二维数组中的查找&#xff09; 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右 非递减 的顺序排序&#xff0c;每一列都按照从上到下 非递…...

TDengine 3.0.2.5 查询再优化!揭秘索引文件的工作原理

TDengine 3.0 虽然对底层做了大规模的优化重构&#xff0c;但是相对于数据文件的工作逻辑和 2.0 相比是整体保持不变的。本系列文章的主旨在于帮助用户深入理解产品&#xff0c;并且拥有基本的性能调试思路&#xff0c;从而获得更好的产品体验。本期文章会在讲解 TDengine 时序…...

蓝牙耳机哪个品牌性价比高?性价比高的无线蓝牙耳机

现如今耳机已经十分普及&#xff0c;大多数人会随身佩戴蓝牙耳机&#xff0c;相较于传统耳机&#xff0c;无线耳机不仅携带方便&#xff0c;舒适度上也更加出色。不过市面上的无线耳机种类繁多&#xff0c;很多朋友不知道该如何挑选&#xff0c;所以小编特意整理了一期性价比高…...

python的disutils创建分发包

python中的distutils包主要用创建共享包&#xff0c;安装包&#xff0c;在平时安装python模块的时候&#xff0c;使用的命令如下&#xff1a; python setup.py install 其实以上代码就是distuitls包提供的功能&#xff0c;直接使用setup.py来进行安装一个包&#xff0c;在用这种…...

【洛谷】P1195 口袋的天空

明显看出为最小生成树&#xff0c;那么&#xff1a;难点在哪里呢&#xff1f;if(cntn-k)//******{flag1;break;}为什么是cntn-k呢而不是k呢&#xff1f;&#xff01;&#xff01;&#xff01;解释&#xff1a;&#xff08;如果每个已经连在一起了就不能分开&#xff0c;不管多少…...

JavaScript高级程序设计读书分享之3章——3.5操作符

JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 目录 操作符 一元操作符 递增/递减操作符 一元加和减 布尔操作符 逻辑非 逻辑与 逻辑或 乘性操作符 乘法操作符 除法操作符 取模操作符 加性操作符 加法操作符 减法操作符 关系操作符 相等操…...

moveToCoordinateF3DconcatenateRotations

moveToCoordinate 演示视频: 注意:前提是3~6轴机器人机构且不是PickAndPlace 该方法_3D。Poses.moveToCoordinate 移动由 指定的对象,该对象 对应于支持的机器人配置之一,只要标识的机器人配置支持,其第一个动画指向指定坐标和指定旋转。这无需您定义姿势即可工作。 工…...

多线程面试题开胃菜6(5道)

一、Fork/Join 框架是干什么的&#xff1f;大任务自动分散小任务&#xff0c;并发执行&#xff0c;合并小任务结果。二、线程数过多会造成什么异常&#xff1f;线程过多会造成栈溢出&#xff0c;也有可能会造成堆异常。三、说说线程安全的和不安全的集合。Java 中平时用的最多的…...

植物大战 List——C++

这里写目录标题vector和stirng的细节对于stringlist的使用list的迭代器反向迭代器构造函数关于list::sort的排序uniquelist的底层模拟实现结点类的实现迭代器模拟实现list实现插入的实现迭代器失效inserterase析构函数拷贝构造赋值构造函数vector和stirng的细节 复习vector的深…...

安灯(andon)系统是车间现场管理的必备工具

安灯&#xff08;andon&#xff09;系统应用越来越广泛&#xff0c;不单单局限于汽车行业&#xff0c;更多生产型企业意识到了提高工作效率的重要性&#xff0c;提高工作效率根本的能提高生产水平&#xff0c;提高产量&#xff0c;而且安灯&#xff08;andon&#xff09;系统不…...

Hazel游戏引擎(004)

本人菜鸟&#xff0c;文中若有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/GameEngineLightWeight&#xff08;中文的注释适合中国人的你&#xff09; 文章目录前言操作步骤讲解GitHubHazel项目此项目定位项目属性修改Sand…...

【CS224W】(task4)图嵌入表示学习

note node2vec&#xff1a; 计算随机游走概率从节点uuu开始模拟rrr条长度为lll的游走链路使用 Stochastic Gradient Descent 优化损失函数 Node2vec在节点分类方面表现更好&#xff1b;而其他方法在链路预测上效果更好&#xff0c;如random walk效率更高&#xff1b;graph emb…...

分享111个HTML医疗保健模板,总有一款适合您

分享111个HTML医疗保健模板&#xff0c;总有一款适合您 111个HTML医疗保健模板下载链接&#xff1a;https://pan.baidu.com/s/1YInaQDnUVsXYtMh1Ls-BHg?pwdxvfc 提取码&#xff1a;xvfc Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 import os import shuti…...

山东大学2022操作系统期末

接力&#xff1a;山东大学2021操作系统期末 2022—2023山东大学计算机操作系统期末考试回忆版 简答题(4 10 points) &#xff08;1&#xff09;用户态&#xff0c;核心态是什么 &#xff08;2&#xff09;这种区分对现代操作系统的意义 &#xff08;3&#xff09;printf(“…...

Hadoop高可用搭建(一)

目录 创建多台虚拟机 修改计算机名称 快速生效 修改网络信息 重启网络服务 关闭和禁用每台机的防火墙 同步时间 安装ntpdate 定时更新时间 启动定时任务 设置集群中每台机器的/etc/hosts 把hosts拷贝发送到每一台虚拟机 配置免密登陆 将本机的公钥拷贝到要免密登…...

算法 - 剑指Offer 重建二叉树

题目 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 解题思路 这题较为复杂&#xff0c; 首先审题&#xff0c;前序遍历规则&#xff1a;根左右&#xff0c; 中序遍历&#x…...

手写JavaScript常见5种设计模式

想分享的几种设计模式 目前模式&#xff1a;工厂模式&#xff0c;单例模式&#xff0c;适配器模式&#xff0c;装饰者模式&#xff0c;建造者模式 建造者模式 简介&#xff1a;建造者模式&#xff08;builder pattern&#xff09;比较简单&#xff0c;它属于创建型模式的一种…...

Python 异步: 当前和正在运行的任务(9)

我们可以反省在 asyncio 事件循环中运行的任务。这可以通过为当前运行的任务和所有正在运行的任务获取一个 asyncio.Task 对象来实现。 1. 如何获取当前任务 我们可以通过 asyncio.current_task() 函数获取当前任务。此函数将为当前正在运行的任务返回一个任务对象。 ... # …...

REDIS-雪崩、击穿、穿透

直接发车&#x1f697; 一.雪崩 1.触发原因 A.大量缓存数据在同一时间过期(失效) B.redis故障宕机 上述均导致全部请求去访问数据库&#xff0c;导致DB压力骤增&#xff0c;严重则导致数据库宕机/系统宕机 2.应对策略 不同触发原因&#xff0c;应对策略也不一致 应对A&a…...

什么人合适学习Python

发了几天的Python基础&#xff0c;也认识了一些朋友&#xff0c;忽然有人问起&#xff0c;说为啥学Python&#xff0c;或者说啥人学习Python&#xff0c;作为一个教龄8年从Python一线讲师到Python教学主管的我和大家分享一下个人的看法&#xff0c;还是提前说一下&#xff0c;个…...

greenDao的使用文档

介绍&#xff1a;greenDAO 是一款轻量级的 Android ORM 框架&#xff0c;将 Java 对象映射到 SQLite 数据库中&#xff0c;我们操作数据库的时候&#xff0c;不在需要编写复杂的 SQL语句&#xff0c; 在性能方面&#xff0c;greenDAO 针对 Android 进行了高度优化&#xff0c; …...

基于JAVA+SpringBoot+LayUI+Shiro的仓库管理系统

基于JAVASpringBootLayUIShiro的仓库管理系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项…...

金三银四面试必看,复盘字节测试开发面试:一次测试负责人岗位面试总结

最近面试了某企业的测试负责人岗位&#xff0c;历经四面&#xff0c;收获蛮多的。 这篇文章&#xff0c;我想聊聊这次面试过程中的一些经历&#xff0c;以及些许经验和教训。 岗位要求 岗位名称&#xff1a;测试负责人 岗位要求&#xff1a;1、扎实的技术以及丰富的技术项目…...

wordpress 指定分类文章/网络推广项目

条件判断 v-if当条件为false时&#xff0c;包含v-if的元素根本不会存在于dom中 v-show 当条件为false时&#xff0c;只是给元素增加一个行内样式display&#xff1a;none 循环遍历 v-for 遍历对象 数组类似 <!DOCTYPE html> <html lang"en"> <hea…...

win2003 iis做网站/广州seo工作

转载自&#xff1a;https://blog.csdn.net/kevin66654/article/details/71480319 原标题&#xff1a;2017广东红帽杯pwn1_writeup&#xff1a;简单ROP 先来正能量一波&#xff1a;作为一个一直没入门pwn的小菜鸟&#xff0c;这一段时间一直被学弟按在地上摩擦很不爽很不爽~~~~~…...

苏州吴中区做网站价格/电商seo搜索引擎优化

SpaceVim 是一个模块化的 Vim IDE&#xff0c;针对 C/C 语言的支持主要依靠 lang#c 模块以及与之相关的其它模块。的这篇文章主要介绍如何使用 SpaceVim 搭建 C/C 的开发环境&#xff0c;侧重介绍跟 C/C 开发相关使用技巧。在阅读这篇文章之前&#xff0c;可以先阅读《使用 Vim…...

如何做一个门户网站/百度推广渠道

一&#xff1a;入学年龄广州市报读小学一年级的孩子&#xff0c;须满6周岁&#xff08;当年8月31日前出生&#xff09;&#xff0c;9月1日-12月31日&#xff08;未满六周岁&#xff09;出生的孩子可选择性今年跟读或明年再入读&#xff1b;这个是在广州上小学的前提&#xff01…...

焦作网站制作-焦作网站建设-焦作网络公司-维科网络/成人再就业技能培训班

ajax和backbone在本文中&#xff0c;我们将使用EaselJS和Backbone.js构建一个简单的拖放应用程序。 骨干网将通过提供模型 &#xff0c; 集合和视图来为我们的应用程序提供结构。 画架将使使用HTML5 canvas元素变得容易。 尽管对于这样一个简单的应用程序&#xff0c;我们不一定…...

wordpress更新以后进不去了/百度大搜推广和百度竞价

...