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.mzph.cn/news/849765.shtml

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

相关文章

深入解析Java扩展机制:SPI与Spring.factories

目录 Java SPI概述 1.1 什么是SPI?1.2 SPI的工作原理1.3 SPI的优缺点 SPI的应用 2.1 Java标准库中的SPI应用2.2 自定义SPI示例 Spring.factories概述 3.1 什么是spring.factories?3.2 spring.factories的工作原理3.3 spring.factories的优缺点 spring.f…

多线程leetcode编程题

synchronized 实现 class ReentrantTest {private int n;private volatile int flag 1;private Object lock new Object();public ReentrantTest(int n) {this.n n;}public void zero(IntConsumer printNumber) throws InterruptedException{for(int i1;i<n;){synchron…

redis vs memcached

## Redis 和 Memcache 的区别总结 | 特征 | Redis | Memcache | |---|---|---| | 数据结构 | 字符串、哈希表、列表、集合、有序集合、位图 | 字符串 | | 持久化 | 支持 | 不支持 | | 性能 | 整体性能优于 Memcache | 读取简单字符串数据性能略胜一筹 | | 复杂性 | 功能更丰富…

Socket编程权威指南(一)打通网络通信的任督二脉

在网络化的今天&#xff0c;Socket已成为构建分布式系统、实现进程间通信的利器。无论是搭建Web服务器、还是开发网络游戏&#xff0c;Socket编程技能都是必不可少的武器。本文将为你娓娓道来Socket编程的精髓&#xff0c;包括基本流程概览、常用函数剖析&#xff0c;以及精彩实…

如何保证数据库和缓存的数据一致性?

保证数据库和缓存的数据一致性是一个复杂的问题&#xff0c;通常需要根据具体的应用场景和业务需求来设计策略。以下是一些常见的方法来处理数据库和缓存之间的数据一致性问题&#xff1a; 缓存穿透&#xff1a;确保缓存中总是有数据&#xff0c;即使数据在数据库中不存在&…

【CS.CN】优化HTTP传输:揭示Transfer-Encoding: chunked的奥秘与应用

文章目录 0 序言0.1 由来0.2 使用场景 1 Transfer-Encoding: chunked的机制2 语法 && 通过设置Transfer-Encoding: chunked优化性能3 总结References 0 序言 0.1 由来 Transfer-Encoding头部字段在HTTP/1.1中被引入&#xff0c;用于指示数据传输过程中使用的编码方式…

Locust:用Python编写可扩展的负载测试

Locust&#xff1a;简化性能测试&#xff0c;让负载模拟更直观- 精选真开源&#xff0c;释放新价值。 概览 Locust是一个开源的性能和负载测试工具&#xff0c;专门用于HTTP和其他协议的测试。它采用开发者友好的方法&#xff0c;允许用户使用普通的Python代码来定义测试场景。…

nvm,node不是内部命令,npm版本不支持问题(曾经安装过nodejs)

nvm安装后nvm -v有效&#xff0c;node指令无效 环境变量配置无问题 推荐方案 下载你需要的node版本 Index of /dist/ (nodejs.org) 下载后解压到你的nvm存储版本的位置 cmd进入切换你的使用版本&#xff08;此时你的nodejs是从网上下载的&#xff0c;npm文件是存在的&…

Maven中的DependencyManagement和Dependencies

Maven中的DependencyManagement和Dependencies Dependencies Dependencies是Maven项目中用来声明项目依赖的部分。在pom.xml文件中的<dependencies>部分&#xff0c;你可以直接列出项目所依赖的库&#xff08;artifacts&#xff09;。每个依赖通常包括以下信息&#xf…

如何配置Feign以实现服务调试

1、引入依赖 在项目中&#xff0c;需要引入Spring Cloud OpenFeign的依赖。这通常是通过在pom.xml文件中添加相应的Maven依赖来完成的。例如&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starte…

Python基础知识详解

目录 Python解释器与环境配置 数据类型与结构 控制流语句 文件与IO操作 异常处理机制 函数与模块化编程 Python全栈开发技术栈 Linux环境下的Python开发与自动化 数据分析与挖掘 人工智能与机器学习 自然语言处理 Python知识图谱是指用来组织和展示Python编程语言及…

【PythonCode】力扣Leetcode21~25题Python版

【PythonCode】力扣Leetcode21~25题Python版 前言 力扣Leetcode是一个集学习、刷题、竞赛等功能于一体的编程学习平台&#xff0c;很多计算机相关专业的学生、编程自学者、IT从业者在上面学习和刷题。 在Leetcode上刷题&#xff0c;可以选择各种主流的编程语言&#xff0c;如C…

如何将HTTP升级成HTTPS?既简单又免费的方法!

在当今数字化时代&#xff0c;网络安全已成为用户和企业关注的焦点。HTTPS作为一种更加安全的网络通信协议&#xff0c;正逐渐取代传统的HTTP成为新的标准。对于许多网站管理员和内容创作者来说&#xff0c;如何免费升级到HTTPS是一个值得探讨的问题。本文将详细介绍一些免费的…

一分钟学习数据安全—自主管理身份SSI加密技术

上篇介绍了SSI的架构。架构之后&#xff0c;我们要了解一下SSI发展的驱动力&#xff1a;加密技术。现代数字通信离不开数学和计算机科学&#xff0c;加密技术也源于此。加密技术使区块链和分布式账本得以实现&#xff0c;也使SSI成为可能。 以下我们就概览一下SSI基础架构中涉及…

前端三大主流框架

目录 1.概述 2.React 2.1.作用 2.2.诞生背景 2.3.版本历史 2.4.优缺点 2.5.应用场景 2.6.示例 2.7.未来展望 3.Vue 3.1.作用 3.2.诞生背景 3.3.版本历史 3.4.优缺点 3.5.应用场景 3.7.示例 3.8.未来展望 4.Angular 4.1.作用 4.2.诞生背景 4.3.版本历史 4…

2 程序的灵魂—算法-2.2 简单算法举例-【例 2.5】

【例 2.5】对一个大于或等于 3 的正整数&#xff0c;判断它是不是一个素数。 算法可表示如下&#xff1a; S1: 输入 n 的值 S2: i2 S3: n 被 i 除&#xff0c;得余数 r S4:如果 r0&#xff0c;表示 n 能被 i 整除&#xff0c;则打印 n“不是素数”&#xff0c;算法结束&#xf…

【介绍下R-tree,什么是R-tree?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【Java】解决Java报错:ArrayIndexOutOfBoundsException

文章目录 引言1. 错误详解2. 常见的出错场景2.1 直接访问数组越界2.2 循环中的索引错误2.3 多维数组的错误访问 3. 解决方案3.1 检查数组长度3.2 正确使用循环3.3 多维数组的正确访问 4. 预防措施4.1 使用增强型 for 循环4.2 编写防御性代码4.3 单元测试 结语 引言 在Java编程…

力扣面试题17.18.最短超串

力扣面试题17.18.最短超串 类似76. 用哈希表处理短数组 然后遍历长数组 找到相同元素 count– –当count0时进入循环 —— 尽可能缩小区间 class Solution {public:vector<int> shortestSeq(vector<int>& big, vector<int>& small) {int nbig.si…

mysql报错 Duplicate entry

在MySQL中&#xff0c;当你尝试执行插入&#xff08;INSERT&#xff09;或更新&#xff08;UPDATE&#xff09;操作时&#xff0c;如果目标表中存在唯一索引&#xff08;包括主键索引、唯一约束索引等&#xff09;&#xff0c;并且你要插入或更新的数据在该索引列上的值与表中已…