python爬虫入门教程(二):requests库的高级用法

requests库除了基本的GET和POST请求外,requests库还提供了许多高级功能,本文将介绍其中一些常用的用法。包括:

  • 会话保持(Session)
  • SSL证书验证
  • 文件上传
  • 代理设置
  • 自定义HTTP适配器
  • 超时设置

请求参数

文章最开始,先把requests库向网站发送请求时可以携带的参数给大家列举出来,并做一个解释。

  • method:HTTP请求的方法,如 GETOPTIONSHEADPOSTPUTPATCH, 或 DELETE
  • url:要发送HTTP请求的URL网址。
  • params:添加到URL的查询字符串中的参数。例如,params={'key1': 'value1', 'key2': 'value2'} 将形成像 http://example.com?key1=value1&key2=value2 这样的URL。
  • data:要发送到服务器的请求体数据。例如,data={'key1': 'value1', 'key2': 'value2'} 在POST请求中会被编码为表单数据。如果发送的是JSON数据,通常使用json参数而不是data,这个后面遇到也会说的。
  • json:JSON格式的数据将自动编码并在请求中发送。通常用于发送JSON格式的POST请求体。
  • headers:要随请求一起发送的HTTP头。例如headers={'User-Agent': 'Mozilla/5.0'}。
  • cookies:要随请求一起发送的cookies。
  • files:用于多部分编码上传的文件。字典的键是文件名,值可以是文件对象、文件路径、或包含文件名、文件对象、内容类型和自定义头信息的元组。
  • auth:用于HTTP认证(如Basic Auth)的元组,通常包含用户名和密码。
  • timeout:设置连接和读取的超时时间(秒)。如果是浮点数,它将作为连接和读取的超时时间。如果是一个元组,第一个值是连接超时时间,第二个值是读取超时时间。
  • allow_redirects:是否允许自动处理重定向。默认为True。(这个我还没有用到过。)
  • proxies:设置请求的代理。字典的键是协议(如'http''https'),值是代理服务器的URL。
  • verify:这个参数控制是否验证服务器的TLS证书。
    布尔型:如果设置为True(默认值),则在发送HTTPS请求时会验证服务器的TLS证书。如果证书无效或不存在,将引发一个SSLError
    字符串:如果提供一个字符串,它应该是一个指向CA证书捆绑包的路径,该捆绑包将被用于验证服务器的TLS证书。这在某些情况下可能很有用,比如当你需要验证自签名证书或特定机构的证书时。
  • stream:这个参数控制是否立即下载响应内容。如果为“False”,将立即下载响应内容。
  • cert:这个参数用于客户端证书,当你需要向服务器提供SSL客户端证书进行身份验证时。如果提供一个字符串,它应该是一个指向SSL客户端证书文件(通常是.pem文件)的路径。如果提供一个元组,它应该包含两个字符串,分别指向SSL客户端证书文件和私钥文件。例如,('cert.pem', 'key.pem')

requests库中源码介绍的参数如下图:

一、会话保持(Session)

使用Session对象可以在多个请求之间保持某些参数,如cookies、HTTP头等。这对于需要登录认证或保持用户状态的网站非常有用。

二、SSL证书验证

默认情况下,requests库会验证SSL证书。但在某些情况下(比如网站证书过期的时候),你可能需要忽略SSL证书验证(不推荐在生产环境中使用)。

三、文件上传

使用files参数可以轻松地上传文件。

四、代理设置

通过proxies参数可以配置代理服务器。

代码如下图:

五、超时设置

在发送请求时,设置超时是一个很重要的安全措施,可以防止程序无限期地等待响应。

代码如下:

六、自定义HTTP适配器

通过自定义HTTP适配器,你可以更改底层的行为,如连接池管理、重试策略等。这个我几乎没怎么用过,暂时先做了解吧,后面在爬虫实战中见到的话再细说。

代码如下:(代码中的操作也可以用正常的循环语句加try...except...语句实现)

我认为只看这些代码或者说是参数使用的例子是没有太大用处的,具体要会在实战中应用这些参数还是得多练习,见过之后就会熟悉具体的应用场景,后面我会发文章来带领大家进一步学习这门技术,感兴趣的可以来看一下。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

dockerhub不可用临时解决方案

近日,在拉取一些docker hub的镜像的时候死活拉不下来,要么超时,要么无法接站点地址,不管是docker hub,还是国内镜像站,统统都不行了。 经过各大媒体报道,以及自己的亲身验证,才知道&#xff0c…

android集成百度文心一言实现对话功能,实战项目讲解,人人都能拥有一款ai应用

大家好,今天给大家讲解下如何实现一个基于百度文心一言的app功能,app内部同时集成了讯飞的语音识别。本文适用于有android基础的小伙伴阅读,文章末尾放上本项目用到的全部实例代码,在使用前请务必看完本文章。 先来给大家看看效果…

Spring的Controller是单例还是多例,如何保证线程安全的。

目录 验证是否单例(默认单例) 多例测试 单例对象成员变量测试 多例对象成员变量测试 解决方案 结论: 补充说明 答案:controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。 正…

Windows下SVN文件损坏,启动服务报错1067

之前碰到过一次,忘记最后怎么解决的了,只记得大概原理和原因,以及解决办法。 1067错误码,很多地方都会碰到,mysql也会有,看来应该是windows系统的错误码。跟具体程序无关。所以直接百度“SVN”、“1067”…

【Python报错】已解决ValueError: Expected 2D array, got 1D array instead

成功解决“ValueError: Expected 2D array, got 1D array instead”错误的全面指南 一、引言 在Python的数据分析和机器学习领域,尤其是使用NumPy、Pandas、scikit-learn等库时,经常会遇到各种类型错误。其中,“ValueError: Expected 2D arr…

AI菜鸟向前飞 — LangChain系列之十七 - 剖析AgentExecutor

AgentExecutor 顾名思义,Agent执行器,本篇先简单看看LangChain是如何实现的。 先回顾 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇) AI菜鸟向前飞 — LangChain系列之十五 - Agent系列&#…

大模型的发展历程

1、早期模型的探索与局限性 1.1早期模型的探索与局限性 从早期的符号逻辑到现代的深度学习 1 模型,AI 领域经历了数十年的探索和迭代,为后续突破打下了坚实基础。随着大数据的发展和 AI 计算能力的爆炸式增长,深度学习模型的崛起显得尤为突出…

有序二叉树java实现

类实现: package 树;import java.util.LinkedList; import java.util.Queue;public class BinaryTree {public TreeNode root;//插入public void insert(int value){//插入成功之后要return结束方法TreeNode node new TreeNode(value);//如果root为空的话插入if(r…

人工智能_机器学习096_PCA主成分分析降维算法_PCA降维原理_介绍和使用_模式识别_EVD特征值分解_SVD奇异值分解---人工智能工作笔记0221

首先我来看PCA降维,可以看到在图像处理中经常用到PCA,经过对数据进行降维可以去除数据噪声,发现数据中的模式,也就是 发现数据的规律. 这里的模式识别就是 机器学习中的一个分支 就是在数据中找规律的意思 我们使用代码看一下 from sklearn.docomposition import PCA from skl…

kivy 百词斩项目 报错

AttributeError: FigureCanvasKivyAgg object has no attribute resize_event AttributeError: FigureCanvasKivyAgg object has no attribute resize_event 是一种常见的Python错误,当你试图访问一个对象(在这个例子中是 FigureCanvasKivyAgg 对象&am…

六、主存储器管理,计算机操作系统教程,第四版,左万利,王英

文章目录 [toc]一、存储管理的功能1.1 存储分配1.2 存储共享1.3 存储保护1.4 存储扩充1.5 地址映射 二、内存资源管理2.1 内存分区2.1.1 静态分区与动态分区2.1.2 等长分区与异长分区 2.2 内存分配2.2.1 静态等长分区的分配2.2.2 *动态异长分区的分配 2.3 碎片与紧凑 三、界地址…

从C到C++,C++入门(2)

在C入门篇(1)中,博主为大家简单介绍了什么是C,以及C中的关键字,命名空间,输入与输出和缺省参数的相关知识。今天就让我们继续一起学习C的基础知识点吧!! 1.函数重载 1.1函数重载的概…

C# WPF入门学习主线篇(十九)—— 布局管理实战『混合布局案例』

C# WPF入门学习主线篇(十九)—— 布局管理实战『混合布局案例』 欢迎来到C# WPF入门学习系列的第十九篇。在前几篇文章中,我们详细介绍了各个布局容器的基本概念和使用方法。本篇博客将通过一个综合的实战案例,展示如何在WPF中使用…

Comfyui容器化部署与简介

目前使用 Stable Diffusion 进行创作的工具主要有两个:Stable Diffusion WebUI 和 ComfyUI。本文重点介绍ComfyUI的部署使用。 ComfyUI 可定制性很强,可以让创作者搞出各种新奇的玩意,通过工作流的方式,也可以实现更高的自动化水平…

k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA详细解释与安装

文章目录 前言VPA简介简单理解详细解释VPA的优缺点优点1.自动化资源管理2.资源优化3.性能和稳定性提升5.成本节约6.集成性和灵活性 缺点1.Pod 重启影响可用性2.与 HPA 冲突3.资源监控和推荐滞后:4.实现复杂度: 核心概念Resource Requests 和 Limits自动调…

【MySQL】(基础篇三) —— 创建数据库和表

管理数据库和表 管理数据库 创建数据库 在MySQL中,创建数据库的SQL命令相对简单,基本语法如下: CREATE DATABASE 数据库名;如果你想避免在尝试创建已经存在的数据库时出现错误,可以添加 IF NOT EXISTS 子句,这样如…

AI 边缘计算平台 - 6 TOPS 低功耗 RK3576

RK3576 是瑞芯微第二代 8nm 高性能 AIOT 平台,CPU 采用八核大小核构架(4A72 2.2GHz 4A53 1.8GHz),以及一个 M0 协处理器。其 CPU 算力高达 58K DMIPS,足以应对各种复杂计算任务。搭载 Mali-G52 MC3 GPU,14…

vscode软件上安装 Fitten Code插件及使用

一. 简介 前面几篇文章学习了 Pycharm开发工具上安装 Fitten Code插件,以及 Fitten Code插件的使用。 Fitten Code插件是是一款由非十大模型驱动的 AI 编程助手,它可以自动生成代码,提升开发效率,帮您调试 Bug,节省…

【CS.AI】GPT-4o:重新定义人工智能的新标杆

文章目录 1 序言2 GPT-4o的技术亮点3 GPT-4o与前代版本的对比3.1 热门AI模型对比表格GPT-3.5GPT-4GPT-4oBERTT5 3.2 其他 4 个人体验与感受5 结论 1 序言 嘿,大家好!今天要聊聊一个超级酷的AI新突破——GPT-4o!最近,OpenAI发布了…

【报文数据流中的反压处理】

报文数据流中的反压处理 1 带存储体的反压1.1 原理图1.2 Demo 尤其是在NP芯片中,经常涉及到报文的数据流处理;为了防止数据丢失,和各模块的流水处理;因此需要到反压机制; 反压机制目前接触到的有两种:一是基…