requests模块

news2024/11/24 0:56:01



1、简介


afa24d67bb674521b4d8139c3457c262.png

        Requests是⼀个优雅⽽简单的Python HTTP库,专为⼈类⽽构建。

        Requests是有史以来下载次数最多的Python软件包之⼀,每天下载量超过400,000次。

        

        之前的urllib做为Python的标准库,因为历史原因,使⽤的⽅式可以说是⾮常的麻烦⽽复杂的,⽽且官⽅⽂档也⼗分的简陋,常常需要去查看源码。与之相反的是,Requests的使⽤⽅式⾮常的简单、直观、⼈性化,让程序员的精⼒完全从库的使⽤中解放出来。

2、安装


在命令行窗口输⼊命令:

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

3、发送请求


使⽤ Requests 发送⽹络请求⾮常简单。导包之后添加⽅法进⾏。

Requests的请求不再像urllib⼀样需要去构造各种Request、opener和handler,使⽤Requests构造的⽅法,并在其中传⼊需要的参数即可。

每⼀个请求⽅法都有⼀个对应的API,⽐如GET请求就可以使⽤get()⽅法,⽽POST请求就可以使⽤post()⽅法,并且将需要提交的数据传递给data参数即可,⽽其他的请求类型,都有各⾃对应的⽅法:

import requests

resp = requests.get('https://www.baidu.com')
resp = requests.post('http://httpbin.org/post', data={'key':'value'})
resp = requests.put('http://httpbin.org/put', data={'key':'value'})
resp = requests.delete('http://httpbin.org/delete')
resp = requests.head('http://httpbin.org/get')
resp = requests.options('http://httpbin.org/get')

print(resp)

发起请求的⽅法变得简单,我们只需要着重关注⼀下发起请求的参数 :

request源码

def request(url,params=None, headers=None, cookies=None,timeout=None,allow_redirects=True,proxies=None,verify=None, data=None,json=None):
        pass

httpbin.org

这个网站是程序员用来做测试的,用来验证请求

{
  "args": {}, 
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", 
    "Accept-Encoding": "gzip, deflate", 
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", 
    "Host": "httpbin.org", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.39", 
    "X-Amzn-Trace-Id": "Root=1-643813dc-7be19f3e27c8a4696424b8cc"
  }, 
  "origin": "58.212.74.124", 
  "url": "http://httpbin.org/get"
}

(1)url

添加请求路径

import requests

url='https://www.baidu.com/'
response = requests.get(url=url)
print(response)

运行结果:

074ed5b43e56457895d8b44f04293f40.png

httpbin.org

1dd0c52efb2e4ceda089b700a665c7b3.png

(2)params

添加请求参数

传递URL参数也不⽤再像urllib中那样需要去拼接URL,⽽是简单的,构造⼀个字典,并在请求时将其传递给params参数,此时,查看请求的URL,则可以看到URL已经构造正确.

eg:

1.在url中直接添加参数

import requests

url = 'http://httpbin.org/get?key1=value1&key2=value2'
response = requests.get(url=url)
print(response.text)

2.构造字典

import requests

url = 'http://httpbin.org/get'
params = {
    'key1':'value1','key2':'value2'
}
response = requests.get(url=url,params=params)
print(response.text)

运行结果:

c07949189a064501b547770773cfc94f.png

(3)headers

添加请求头

如果想⾃定义请求的Headers,同样的将字典数据传递给headers参数。

 通过添加请求头来伪造自己的身份

341337ab76024e5dafb7f27f5db59796.png

eg:

import requests
​
url = 'https://httpbin.org/get'
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"
}
response = requests.get(url=url,headers=headers)
print(response.text)

运行结果:

80cb08911e0347a0babe36687978edce.png

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"
    
# 携带的内容:操作系统、浏览器等

(4)cookies

状态保持

储存用户身份

Requests中⾃定义Cookies也不⽤再去构造CookieJar对象,直接将字典递给cookies参数。

服务器是不记录用户信息的,为了让服务器能够识别用户,用户每次访问的时候就给它一个cookies,这个cookies保存在浏览器(本地电脑)。

eg:

1.在请求头中构造

import requests
​
url = 'https://httpbin.org/get'
headers={
    "User-Agent": "",
    'cookie': 'crawler',
    'referer': 'crawler' # 防盗链
}
response = requests.get(url=url,headers=headers)
print(response.text)

2.单独构造

import requests
​
url = 'https://httpbin.org/get'
headers={
  "User-Agent": "crawler1"
}
cookies = {'name':'crawler1' }
response = requests.get(url=url,headers=headers,cookies=cookies)
print(response.text)

运行结果:

(5)timeout

设置超时时间

当访问超时,设置timeout参数即可。

import requests
​
url = 'http://www.baidu.com'
resp = requests.get(url, timeout=3)
print(resp.text)

由于是国外的网站,访问会超时,会一直等待响应,这时我们设置超时时间,超时时间已过之后就会超时报错

运行结果:

(6)proxies

设置代理

当我们需要使⽤代理时,同样构造代理字典,传递给proxies参数。

请求端ip地址

eg:

import requests
​
url = 'https://httpbin.org/get'
proxies = {
  'http':'183.209.124.38:8088' # 代理ip
}
response = requests.get(url=url,proxies=proxies)
print(response.text)

运行结果:

快代理 - 企业级HTTP代理IP云服务我这里使用的代理ip不可用,可以购买使用:快代理 - 企业级HTTP代理IP云服务

(7)verify

证书忽略验证

有时候我们使⽤了抓包⼯具,这个时候由于抓包⼯具提供的证书并不是由受信任的数字证书颁发机构颁发的,证书默认是开启的,所以证书的验证会失败,所以我们就需要关闭证书验证。在请求的时候把verify参数设置为False就可以关闭证书验证了。

eg:

import requests
​
url = 'https://httpbin.org/get'
response = requests.get(url=url,verify=False) # 出现警告
print(response.content.decode())

运行结果:

PS:关闭验证后,会有⼀个⽐较烦⼈的warning,当不影响运行的结果,关闭即可。

import warnings
​
warnings.filterwarnings("ignore")

(8)data

携带数据

POST请求发送Form表单数据

eg:

import requests
​
url = 'http://httpbin.org/post'
data = {"name":"spider"}
resp = requests.post(url, data=data)
print(resp.text)

运行结果:

 (9)json

携带数据

eg:

url = 'https://httpbin.org/post'
data = {
    'name':'crawler'
}
response = requests.post(url=url,json=data)
print(response.text)

运行结果:

注意:

PS:json和data 不可以同时添加

4、response响应对象

# print(resp.text)    # 转换成字符串    文本形式输出源代码
# print(resp.text[0])
# str类型


print(resp.content) # 转换成字节 原因: 1.网页源代码乱码    2.保存图片、视频、音频等二进制
# bytes类型

# print(resp.content.decode # 解码 ,默认utf-8
# print(resp.content.decode('utf-8'))
# <class 'builtin_function_or_method'> ——内置函数

print(resp.status_code) # 状态码
# int类型

# print(resp.headers) # 响应头
# print(resp.cookies) # 响应的cookie
# print(resp.url) # 请求的url
# print(resp.request.url) # 请求的url
# print(resp.request.headers) # 请求头

# 方法json

# print(resp.json()) # 转换成json类型
# print(resp.json()['headers']['X-Amzn-Trace-Id'])



# print(resp.text)
# print(resp.text[-11:-8])

# 也可以用python中内置的json包
import json
data_json = json.loads(resp.text) # 字符串转为 dict
print(data_json['headers']['X-Amzn-Trace-Id'])

# print(json.dumps(data_json)) # dict 转为 字符串类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/974386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单臂路由实验:通过Trunk和子接口实现VLAN互通

文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. PC 配置 IP 地址2. PC3 属于 Vlan10&#xff0c;PC4 属于 Vlan20&#xff0c;配置单臂路由实现 Vlan10 和 Vlan20 三层互通3. 测试在 PC3 上 Ping PC4 &#xff0c;可以 Ping 通 PC4 摘要&#xff1a; 本文…

附录1-爬虫的一些技巧

目录 1 寻找url与显示内容的关系 2 修改请求头 3 局部刷新 4 阅读返回信息 5 多尝试页面其他的使用方式 6 尝试不同类型参数 7 表单类型的post多用data发&#xff0c;接口类型的post多用json发 8 消除degger 9 你在浏览器上看到的html与你下载下来的html不一…

【LeetCode每日一题合集】2023.8.21-2023.8.27(统计点对的数目)

文章目录 2337. 移动片段得到字符串⭐解法——脑筋急转弯 849. 到最近的人的最大距离1782. 统计点对的数目&#x1f6b9;&#x1f6b9;&#x1f6b9;&#x1f6b9;&#x1f6b9;解法——从双指针到终极优化单独处理每个询问终极优化TODO 技巧总结用一个int存储两个不超过 65535…

最全数据脱敏标准汇编,有必要了解一下!(附下载)

《网络安全法》第四十二条&#xff1a;网络运营者不得泄露、篡改、毁损其收集的个人信息&#xff1b;未经被收集者同意&#xff0c;不得向他人提供个人信息。但是&#xff0c;经过处理无法识别特定个人且不能复原的除外。 《数据安全法》第二十七条&#xff1a;开展数据处理活动…

W5100S_EVB_PICO 做MQTT测试(十二)

前言 上一章我们用W5100S_EVB_PICO 开发板做Ping测试&#xff0c;那么本章我们进行W5100S_EVB_PICO MQTT的测试。 什么是mqtt&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订…

Linux xargs命令继续学习

之前学习过Linux xargs&#xff0c;对此非常的不熟悉&#xff0c;下面继续学习一下&#xff1b; xargs 可以将管道或标准输入&#xff08;stdin&#xff09;数据转换成命令行参数&#xff0c;也能够从文件的输出中读取数据&#xff1b; xargs也可以给命令传递参数&#xff1b;…

【Linux】地址空间概念

目录 前言&#xff1a; 地址空间回顾 验证&#xff1a;一个变量是否会有两个值&#xff1f; 一. 什么是地址空间 虚拟地址与物理地址之间的关系 二. 地址空间是如何设计的 1. 回答一个变量两个值 2.扩展 继续深入理解 三. 为什么要有地址空间 原因&#xff1a; 1. 使…

触摸屏与多台 PLC之间无线Ethernet通信

在实际系统中&#xff0c;同一个车间里分布多台PLC&#xff0c;由触摸屏集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候&#xff0c;如果布线的话&#xff0c;工程量较大且不美观&#xff0c;这种情况下比较适合采用无线通信方式。本方案以威纶通触摸屏和…

解决解析maven依赖加载卡住问题

首先找到用户设置文件的位置&#xff1a; 根据位置查找文件&#xff0c;没有则创建。 修改maven的默认镜像为阿里云镜像。 <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/pub…

直播进入新风口:XR虚拟直播市场火爆,未来发展势不可挡

&#xfeff; 近年来&#xff0c;直播行业随着技术的不断发展&#xff0c;呈现出了蓬勃的发展态势。在这个竞争日益激烈的直播行业中&#xff0c;XR虚拟直播成为了最新的风口。XR虚拟直播是一种新型的直播形式&#xff0c;通过虚拟现实技术&#xff0c;让用户置身于直播现场&a…

使用生成式 AI 增强亚马逊云科技智能文档处理

数据分类、提取和分析对于处理大量文档的组织来说可能具有挑战性。传统的文档处理解决方案是手动的、昂贵的、容易出错的,并且难以扩展。利用 Amazon Textract 等 AI 服务,亚马逊云科技智能文档处理(IDP)允许您利用业界领先的机器学习(ML)技术来快速准确地处理任何扫描文档或图…

MySQL 枚举类型如何定义比较好 tinyint?enum?varchar?

enum介绍 先来介绍一下enum类型吧。 ENUM 是一个字符串对象&#xff0c;其值通常选自一个允许值列表中&#xff0c;该列表在表创建时的列规格说明中被明确地列举。&#xff08;建表的时候写到建表语句里&#xff09; 虽然表面是字符串值&#xff0c;但其内部是数字索引&…

Nvidia vpi2 不是最新版本问题

问题&#xff1a; 根据官方手册&#xff1a;VPI - Vision Programming Interface: Installation安装的vpi2有可能不是最新版本&#xff0c;主要原因是手册中的添加的源不是最新的。 解决方法&#xff1a; 在 Index网址中搜索 vpi&#xff0c;如下 可以看到&#xff0c;最新的…

【数字通信原理】笔记(持续更新ing)

通信原理学习笔记&#xff0c;课程见b站: 由于教材不同&#xff0c;我们的课程使用的是《数字通信原理》主编:李白萍 版本&#xff0c;因此此笔记以我们的教材为主整理up主的笔记。 详情见:通信原理 文章目录 第一章 绪论1. 通信的基本概念2. 信息的量度3. 通信系统的性能指标 …

Mars3d图层树//图层管理加载时设置默认折叠的状态

问题&#xff1a;Mars3d图层树//图层管理加载时设置默认折叠的状态。 设置参考&#xff1a; 有个参数 open:false&#xff0c;写在对应的图层配置下&#xff0c;比如某个节点不展示&#xff0c;就对这个节点配置下。 如果全局&#xff0c;可以搜下这个widget内的代码&#xff…

YOLO目标检测——赛马数据集下载分享

目标检测赛马数据集在马匹竞赛、马匹健康监测、马匹行为研究、马匹安全监控和马匹图像检索等应用场景中具有广泛的应用潜力&#xff0c;可以为马匹产业的发展和管理提供有力支持 数据集点击下载&#xff1a;YOLO赛马数据集640图片标框.rar 更多数据集下载和效果展示&#x…

Nature Medicine:GWAS揭示抑郁症与其他精神疾病风险之间的关联

几乎五分之一的丹麦人在一生中经历过抑郁症。奥尔胡斯大学的一项新研究现在表明&#xff0c;抑郁症的遗传风险与其他精神病诊断的遗传风险增加相关。这项研究于2023年7月18日发表在《Nature Medicine》&#xff08;IF202282.9&#xff09;杂志上。 研究人员分析了130万人&#…

高光谱图像超分辨率-总

高光谱图像超分辨率 高光谱图像超分辨率 高光谱图像超分辨率一、基础内容1.1 高光谱图像特点1.2 研究现状1.3 高光谱图像数据集1.4 评价指标1.5 Wald**协议**二、文献阅读清单2.1 综述+先锋工作1.提出解混的思想。2.随机混合模型在高光谱分辨率增强中的应用。3.遥感中的多光谱和…

MySQL基础(六)流程控制、游标、触发器、窗口函数

目录 定义条件与处理程序 定义条件 定义处理程序 流程控制 IF 分支结构之 CASE 循环结构之LOOP 循环结构之WHILE 循环结构之REPEAT 跳转语句leave和iterate 游标 使用游标步骤 全局变量的持久化 触发器 触发器的使用 查看触发器 删除触发器 定义条件与处理程序 …

基于 LLM 的知识图谱另类实践

本文整理自社区用户陈卓见在「夜谈 LLM」主题分享上的演讲&#xff0c;主要包括以下内容&#xff1a; 利用大模型构建知识图谱利用大模型操作结构化数据利用大模型使用工具 利用大模型构建知识图谱 上图是之前&#xff0c;我基于大语言模型构建知识图谱的成品图&#xff0c;主…