03.requests入门

1、requests概述

​ 前面的课程中我们了解了requests模块是一个网络请求模块,可以帮助我们模拟成客户端去请求服
务器的数据。我们今天就是主要针对这个模块进行学习。

​ 我们可以在浏览器中抓取到这些请求与响应的内容,那么我们可以“伪造”请求吗?也就是不再通过
浏览器发送这些数据,而是通过Python来模拟浏览器发送请求。答案是可行的。而Requests模块就可
以完成这种功能。

  • Requests 模块就是 Python 实现的简单易用的 HTTP库

还有其他库吗? 回答也是肯定的,例如 urllib , urllib2 等模块。但是目前来说 Requests 模块是最
流行的。而且也是做好用的模块。

利用pip 可以非常方便的安装:

pip install requests

2、requests模块请求参数

​ 通过前面我们使用用requests模块已经知道,requests模块在发送网络请求的时候可以传递一些关
键字参数,如下图我们写过的案例所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么除了这两个关键字参数,requests模块在发送网络请求的时候还有哪些关键字参数呢?接下来我们
通过查看源码的方式,介绍requests模块发送请求常用的关键字参数。如下所示:

"""
method: 请求方法 get post
url: 请求网址
params: (可选的) 查询参数headers: (可选的) 字典 请求头
cookies: (可选的) 字典.cookiejar对象, 用户身份信息
proxies: (可选的) ip代理data: (可选的) 字典.列表.元组.bytes post请求时会用到
json: (可选的) 字典 提交参数verify: (可选的) 是否验证证书, ca证书
timeout: (可选的) 设置响应时间,一旦超过,程序会报错
allow_redirects: (可选的) 是否允许重定向, 布尔类型数据files: (可选的) 字典,文件
auth: (可选的) 字典,权限认证
stream: (可选的) 是否是数据流传输
"""

以上关键字参数排列顺序根据使用的频率进行排列。

3、常见参数的使用

3、1 url地址中的参数

​ 在使用requests模块发送请求之前,我们就要回顾之前学习到的url(统一资源定位符)。

​ 在你拿到数据所在的url地址之后,发送网络请求时,请求的url中包含两种地址参数:查询参数

请求参数

  • 查询参数

    当我们爬一些特殊网址时,请求的url中会有一些特殊的参数,例如以下站点:

    在这里插入图片描述

    这种是 URL 的查询参数。前面是网址, 后面的二值性数据,就是查询参数。

    URL 的查询字符串(query string)传递某种数据。如果你是手工构建 URL,也就是通过拼接字符串构造的URL。那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。

    例如: https://image.so.com/i?q=%E9%A3%8E%E6%99%AF&src=srp

    params关键字参数

    requests 模块允许你使用 params 关键字参数,以一个字典来提供这些参数。

    举例来说,如果你想传递 key1=value1 和 key2=value2 到 httpbin.org/get ,那么你可以使用如下代码:

    import requestsparams = {'q': '风景''src': 'srp'}
    response = requests.get("https://image.so.com/i", params=params)
    

    通过打印输出该 URL,你能看到 URL 已被正确编码:

    print(response.url)
    # 打印结果
    https://image.so.com/i?q=%E9%A3%8E%E6%99%AF&src=srp
    

    注意:

    在url地址中默认是不支持中文字符的,所以在请求中会把中文字符转化成url编码形式

    同样的查询参数可以在浏览器抓包工具中找到,位于Headers栏目下的Query String Parameters
    中,如下图所示:

    在这里插入图片描述

  • 请求参数

    ​ 请求参数和查询参数有本质的区别。请求参数一般是在发送post请求,向服务器提交表单数据请求的时候携带的参数。

    注意:url地址中不会显示请求参数,只会显示查询参数。

    ​ 请求参数在浏览器抓包工具中,位于Headers栏目下的Form Data中

    如下面数据抓包所示:

    在这里插入图片描述

    data关键字参数

    ​ 在requests模块中发送POST请求也是比较容易的操作,要实现这个,只需简单地传递一个字典data参数。你的数据字典在发出请求时会自动编码为表单形式:

    data = {'key1': 'value1''key2': 'value2'}
    response = requests.post("http://httpbin.org/post", data=data)
    

    ​ 当然Requests中的post方法只是相对于get方法多了一个data参数,其他参数都是类似的,例如我们也可以为post中的网址添加查询字符串 params 参数,也可以像get方法一样添加 headers 参数等。

3、2 cookies关键字参数

​ 在前面我们学习http协议的时候,请求体字段中就讲述过cookies字段,这个字段代表用户身份的
标识,一般平台通过这个字段存储用户信息,包括并不限于用户名、密码、登陆时间等等。一般
cookies信息都是二值型的,即key=value形式,非常像字典的构造形式。每一个key=value的信息,都
代表用户的片段信息,很多个key=value片段构成一个完整的cookies字段,如下图所示:

![外链图

​ 值得注意的是,cookies中所有片段信息,有浏览器自动生成的,也有服务器在响应数据的时候给
你生成的。一旦服务给你生成了cookie片段,那么大概率就会针对这些片段进行校验,验证你的用户身
份,从而决定是否返回数据给你。相反来说浏览器自动为我们生成的cookie片段对我们代码请求影响不
大,因为服务器往往会校验自己生成的cookie片段,对于浏览器自动生成的cookie片段不会校验。

​ 在requests模块中发送带cookies字段的请求也是比较容易的操作,要实现这个,只需简单地传递
一个字典cookies关键字即可

cookies = {'key1': 'value1''key2': 'value2'}
response = requests.get("url", cookies=cookies)

3、3 verify关键字参数

​ 数字证书(俗称ca证书,以下简称ca证书)为实现双方安全通信提供了电子认证。在因特网、公司
内部网或外部网中,使用数字证书实现身份识别和电子信息加密。数字证书中含有密钥对(公钥和私
钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。

​ 目前各大网站基本有自己的ca证书,但是不排除有的网站为了节约网站建设开销并没有购买ca证
书。又因为requests模块在发送网络请求的时候,默认会验证ca证书。如果当前网站没有ca证书,那么
就会报出如下的错误:

在这里插入图片描述

如果出现上述错误,那么我们可以用verify关键字参数,在请求的时候不验证网站的ca证书

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

如果加了verify=False这个关键字参数,使用requests模块发送请求的时候会给你弹出一个警告,警告
你当前的请求可能不安全,如下图所示:

在这里插入图片描述

这个警告对于后面的代码逻辑没有影响,有强迫症的可以考虑加入以下代码忽略警告:

    import urllib3urllib3.disable_warnings()

3、4 timeout关键字参数

​ 如果对于requests模块发送的网络请求,请求数据的速度太慢,达不到你的要求。那么你可以考虑
加上timeout关键字参数对于请求数据的时间做出限制,如下所示:

response = requests.get("url", timeout=限制时间)

限制时间单位以秒为单位,超过这个时间限制,程序报错。对于报错可以用异常捕获解决。

3、5 allow_redirects关键字参数

​ 对于一些重定向的网络请求,比如登陆成功后跳转到用户个人页面。如果对于当前请求你不想要重
定向,就需要当前地址数据,那么可以添加allow_redirects=False关键字,阻止当前请求的重定向。
如下所示:

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

3、6 proxies关键字参数

​ 我们在做爬虫的过程中经常会遇到这样的情况:最初爬虫正常运行,正常抓取数据,然而一杯茶的
功夫可能就会出现错误,比如403 Forbidden;这时候网页上可能会出现 “您的IP访问频率太高”这样的
提示,过很久之后才可能解封,但是一会后又出现这种情况。

​ 造成这种现象的原因是该网站已采取了一些防爬虫措施。 例如,服务器将在一个时间单位内检测IP
请求的数量。 如果超过某个阈值,服务器将直接拒绝该服务并返回一些错误信息。 这种情况可以称为
封IP,因此该网站成功禁止了我们的抓取工具。

​ 想象一下,由于服务器检测到IP单位时间内的请求数量,因此我们使用某种方式来伪装IP,以使服
务器无法识别由本地计算机发起的请求,因此我们可以成功地阻止IP被封。

​ 对应的在使用requests模块发送网络请求时,可以用proxies关键字参数对本地计算机进行伪装,
如下所示:

response = requests.get("url", proxies=代理)

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

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

相关文章

JavaEE-网络编程套接字(UDP/TCP)

下面写一个简单的UDP客户端服务器流程 思路: 对于服务器端:读取请求,并解析–> 根据解析出的请求,做出响应(这里是一个回显,)–>把响应写回客户端 对于客户端:从控制台读取用户输入的内容–>从控制…

Python综合案例:学生管理系统

目录 需求说明: 功能: 创建入口函数: 实现菜单函数: 实现增删查操作: 1. 新增学生 2. 展示学生 3. 查找学生 4. 删除学生 加入存档读档: 1. 约定存档格式 2. 实现存档函数 3. 实现读档函数 打…

RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)

一、MQ基本介绍 MQ(message queue):本质上是个队列,遵循FIFO原则,队列中存放的是message,是一种跨进程的通信机制,用于上下游传递消息。MQ提供“逻辑解耦物理解耦”的消息通信服务。使用了MQ之…

Ubuntu 22.04 安装Nvidia显卡驱动、CUDA、cudnn

GPU做深度学习比CPU要快很多倍,用Ubuntu跑也有一定的优势,但是安装Nvidia驱动有很多坑 Ubuntu版本:22.04.3 LTS 分区: /boot分配 1G ,剩下都分给根目录/ 显卡:GTX 1050 Ti 坑1:用Ubuntu自带的 …

基于SpringBoot的车辆管理系统

目录 前言 一、技术栈 二、系统功能介绍 员工信息管理 证件信息管理 车辆信息管理 事故登记管理 事故登记 保养登记 违章登记 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实…

【小沐学前端】Windows下搭建WordPress(nginx1.25、PHP8.2、WordPress6.3、MySQL5.7)

文章目录 1、简介1.1 Nginx1.2 PHP1.3 WordPress1.4 MySQL 2、下载2.1 Nginx2.2 PHP2.3 WordPress2.4 MySQL 3、搭建环境3.1 Nginx3.2 PHP3.3 WordPress3.4 MySQL 4、配置WordPress4.1 选择语言4.2 配置数据库4.3 登录界面4.4 常规设置4.5 写作操作 结语 1、简介 WordPress是基…

SEO搜索引擎

利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名,吸引更多的用户访问网站,提高网站的访问量,提高网站的销售能力和宣传能力,从而提升网站的品牌效应 搜索引擎优化的技术手段 黑帽SEO 通过欺骗技术和滥用搜索算法来推销毫不…

WebPack-打包工具

从图中我们可以看出,Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件,减少了页面的请求. 下面举个例子 : main.js 我们只命名导出一个变量 export const name"老六"index.js import { name } from "./tset/…

VC6 WIN32,Dialog为主窗口编程

VC6是Microsoft非常经典的开发环境,尤其是Windows API方式开发,自从Quick C for win以来基本保持着同样的风格和API,在它上面做习练很不错。下面是习练完成的界面,它是在自动创建的WIN32 application模板下,增加一个Di…

怎么将Linux上的文件上传到github上

文章目录 1. 先在window浏览器中创建一个存储项目的仓库2. 复制你的ssh下的地址1) 生成ssh密钥 : 在Linux虚拟机的终端中,运行以下命令生成ssh密钥2)将ssh密钥添加到github账号 : 运行以下命令来获取公钥内容:3. 克隆GitHub存储库:在Linux虚拟机的终端中,导航到您想要将文件上…

ESP32设备驱动-I2C-LCD1602显示屏驱动

I2C-LCD1602显示屏驱动 1、LCD1602介绍 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。 通过前面的实例我们知道,并口方式…

GPX可视化工具 GPX航迹预览工具

背景 当我们收到别人分享的航迹文档,即gpx文档时,如何快速的进行浏览呢?我们可以使用GIS软件来打开gpx文档并显示gpx中所记录的航迹,例如常用的GIS软件有googleEarth, Basecamp, GPXsee, GPX E…

Net相关的各类开源项目

Net相关的各类开源项目 WPFHandyControlLive-ChartsWPFDeveloperswpf-uidesignStylet WebScheduleMasterYiShaAdminBlog.CoreNebula.AdminNewLife.CubeOpenAuth UnityuGUIUnityCsReferenceEpitomeMyUnityFrameWorkKSFrameworkTowerDefense-GameFramework-Demo 通用ClientServer…

mac电脑任务管理器 Things3 for Mac中文

Things 3是一款效率软件,可以帮助用户规划一天行程、管理项目,并使使用者按部就班地朝目标迈进。以下是Things 3的主要特点和功能: 待办事项:以“待办事项”为基本组成部分,每一则待办事项都是迈向大成就的一小步。用…

C++stackqueue

目录 一、stack 1.1 简要介绍 1.2 小试身手 1.3 模拟实现 二、queue 2.1 简要介绍 2.2 小试身手 2.3 模拟实现 三、deque 3.1 简要介绍 3.2 分析底层 四、priority_queue 4.1 简要介绍 4.2 小试身手 4.3 模拟实现 五、仿函数/函数对象 5.1 简要介绍 一…

优化方法的应用(optimtool.example)

import optimtool as oo from optimtool.base import np, sp, pltpip install optimtool>2.4.2优化方法的应用(optimtool.example) import optimtool.example as oeLasso问题(Lasso) oe.Lasso.[函数名]([矩阵A], [矩阵b], [因…

模型训练环境相关(CUDA、PyTorch)

模型训练环境相关(CUDA、PyTorch) 1. 查看当前 GPU 所能支持的最高版本的 CUDA2. 如何判断是否安装了 CUDA3. 安装 PyTorch3.1 创建虚拟环境3.2 激活并进入虚拟环境3.3 安装 PyTorch 1. 查看当前 GPU 所能支持的最高版本的 CUDA 打开 NVIDIA 控制面板&a…

Android学习之路(20) 进程间通信

IPC IPC为 (Inter-Process Communication) 缩写,称为进程间通信或跨进程通信,指两个进程间进行数据交换的过程。安卓中主要采用 Binder 进行进程间通信,当然也支持其他 IPC 方式,如:管道,Socket&#xff0…

后端面经学习自测(二)

文章目录 1、Http1.1和2.0的区别大概是什么?HTTP & HTTPS 2、HTTP,用户后续的操作,服务端如何知道属于同一个用户cookie & session & token手机验证码登录流程SSO单点登录 3、如果服务端是一个集群机器?4、hashmap是线…

华为云云耀云服务器L实例评测|基于canal缓存自动更新流程 SpringBoot项目应用案例和源码

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 在之前的博客中,介绍过canal的安装和配置,参考博客 拉取创建canal镜像配置相关参数 & …