python爬虫-----深入了解 requests 库下篇(第二十六天)

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏:python爬虫学习🎈🎈
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 

hello,兄弟姐妹们!我是喔的嘛呀。今天我们来学习 requests 后七个知识点。

目录

八、超时设置

九、SSL 验证

十、文件上传和下载

十一、连接池和线程安全

十三、HTTP 方法

十四、其他方法


八、超时设置

在网络通信中,超时设置非常重要,它可以确保在一定时间内收到服务器的响应,避免因等待过久而导致程序长时间阻塞。在使用 requests 库发送请求时,可以通过 timeout 参数来设置超时时间,该参数接受一个元组,分别指定连接超时时间和读取超时时间,单位为秒。以下是如何设置超时的示例:

import requestsurl = '<http://example.com/api>'
# 设置超时时间为连接超时10秒,读取超时20秒
response = requests.get(url, timeout=(10, 20))# 处理响应
print(response.text)

在这个示例中,我们将连接超时时间设置为 10 秒,读取超时时间设置为 20 秒。如果在规定时间内未收到响应,requests 库会抛出一个 Timeout 异常。这样可以确保及时处理网络请求中的超时情况,提高程序的稳定性和可靠性。

九、SSL 验证

在使用 requests 库发送 HTTPS 请求时,默认会验证服务器的 SSL 证书。SSL 证书用于验证服务器身份,并确保通信过程中的数据安全性。如果需要禁用 SSL 验证,可以将 verify 参数设置为 False。但是在实际应用中,为了保证通信的安全性,建议保持默认设置,即默认开启 SSL 验证。以下是如何设置 SSL 验证的示例:

import requestsurl = '<https://example.com/api>'
# 禁用 SSL 验证
response = requests.get(url, verify=False)# 处理响应
print(response.text)

在这个示例中,我们通过将 verify 参数设置为 False,来禁用 SSL 验证。这样虽然可以忽略证书验证过程,但也会降低通信的安全性。在实际生产环境中,建议仔细考虑是否禁用 SSL 验证,确保通信的安全性。

十、文件上传和下载

在网络爬虫中,有时需要上传文件到服务器或从服务器下载文件。requests 库提供了方便的方法来处理文件上传和下载。

  1. 文件上传:使用 files 参数可以上传文件。files 参数是一个字典,键是字段名,值是文件对象。以下是一个示例:
import requestsurl = '<http://example.com/upload>'
files = {'file': open('example.txt', 'rb')}
response = requests.post(url, files=files)print(response.text)
  1. 文件下载:使用 response.iter_content(chunk_size=1024) 可以以流的方式下载文件。chunk_size 参数指定每次读取的字节数,可以根据需要调整。以下是一个示例:
import requestsurl = '<http://example.com/file.txt>'
response = requests.get(url, stream=True)with open('file.txt', 'wb') as file:for chunk in response.iter_content(chunk_size=1024):file.write(chunk)print('File downloaded successfully')

在这个示例中,我们通过 response.iter_content(chunk_size=1024) 以流的方式下载文件,并将文件写入本地。这样可以有效地处理大文件的下载。

十一、连接池和线程安全

在网络爬虫中,使用连接池可以提高性能,因为它可以减少重复创建和销毁连接的开销。另外,线程安全性也很重要,特别是在多线程环境下使用网络请求时,需要确保请求的线程安全性。requests 库提供了一些方式来管理连接池和确保线程安全性。

  1. 连接池管理:可以使用 requests.Session() 创建会话对象,并通过 requests.adapters.HTTPAdapter 设置连接池的大小、最大连接数等参数。
import requests# 创建会话对象
session = requests.Session()# 创建适配器,设置连接池的大小和最大连接数
adapter = requests.adapters.HTTPAdapter(pool_connections=10, pool_maxsize=10)
session.mount('http://', adapter)
session.mount('https://', adapter)# 使用会话对象发送请求
response = session.get('<http://example.com>')
  1. 线程安全性requests 库本身是线程安全的,但在多线程环境中使用时,应该确保每个线程都使用独立的会话对象。这样可以避免多个线程共享同一个会话对象的连接池,从而保证线程安全性。
import requests
from concurrent.futures import ThreadPoolExecutor# 创建线程池
executor = ThreadPoolExecutor(max_workers=10)def fetch_url(url):# 每个线程使用独立的会话对象session = requests.Session()response = session.get(url)print(response.text)urls = ['<http://example.com>'] * 10
executor.map(fetch_url, urls)

在这个示例中,我们使用了 concurrent.futures.ThreadPoolExecutor 创建了一个包含10个线程的线程池,并通过 map 方法并发地发送请求。每个线程内部都创建了独立的会话对象,确保了线程安全性。

十二、定制请求

定制请求是指根据需求对请求进行个性化设置,如设置请求头、请求参数、请求体等。requests 库提供了丰富的参数和方法来定制请求。

  1. 设置请求头(headers 参数)

import requestsurl = '<http://example.com>'
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)
  1. 设置查询参数(params 参数)
import requestsurl = '<http://example.com>'
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(url, params=params)
  1. 设置请求体(data 参数)
import requestsurl = '<http://example.com>'
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post(url, data=data)
  1. 设置超时时间(timeout 参数)
import requestsurl = '<http://example.com>'
response = requests.get(url, timeout=5)  # 设置超时时间为5秒
  1. 设置代理服务器(proxies 参数)
import requestsurl = '<http://example.com>'
proxies = {'http': '<http://127.0.0.1:8888>', 'https': '<https://127.0.0.1:8888>'}
response = requests.get(url, proxies=proxies)

通过这些方法,你可以根据需要定制请求,以满足不同的需求。

十三、HTTP 方法

HTTP 定义了多种请求方法,用于指定对资源的不同操作。在 requests 库中,可以使用 requests.request() 方法来发送任意类型的 HTTP 请求,其中 method 参数用于指定请求方法。以下是一些常用的 HTTP 方法及其用法:

1.GET:用于请求指定的资源。GET 请求的参数会附加在 URL 的后面。


import requestsresponse = requests.request('GET', '<http://example.com/api>')
  1. POST:用于向指定的资源提交数据,常用于表单提交或上传文件。
import requestsdata = {'key1': 'value1', 'key2': 'value2'}
response = requests.request('POST', '<http://example.com/api>', data=data)
  1. PUT:用于更新指定的资源,通常用于更新整个资源。
import requestsdata = {'key1': 'value1', 'key2': 'value2'}
response = requests.request('PUT', '<http://example.com/api>', data=data)
  1. DELETE:用于删除指定的资源。

import requestsresponse = requests.request('DELETE', '<http://example.com/api>')

5. HEAD:类似于 GET 请求,但只返回头部信息,不返回实际内容。

import requestsresponse = requests.request('HEAD', '<http://example.com/api>')

6. OPTIONS:用于获取目标资源所支持的通信选项。

import requestsresponse = requests.request('OPTIONS', '<http://example.com/api>')

通过使用这些方法,你可以灵活地发送各种类型的 HTTP 请求,以满足不同的需求。

十四、其他方法

除了上述提到的方法和属性外,requests 库还提供了一些其他有用的功能和属性:

  1. 响应时间(response.elapsed):可以获取请求的响应时间,以 datetime.timedelta 对象的形式返回。

import requestsresponse = requests.get('<http://example.com>')
print(response.elapsed.total_seconds())  # 获取响应时间,单位为秒
  1. 重定向历史(response.history):如果请求发生了重定向,可以通过该属性获取重定向的历史。

import requestsresponse = requests.get('<http://example.com>')
for redirect in response.history:print(redirect.url)
  1. 请求信息(response.request):可以获取请求的相关信息,如请求方法、URL、请求头等。
import requestsresponse = requests.get('<http://example.com>')
request = response.request
print(request.method)
print(request.url)
print(request.headers)

通过这些功能和属性,你可以更全面地了解请求和响应的相关信息,方便进行进一步的处理和分析。

好了,兄弟姐妹们,今天的学习就到这里了。老规矩第二十七天的学习,还是几个案列把知识点实操一下。拜拜喽!

祝屏幕前的兄弟姐妹们,天天开心,好运连连!

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

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

相关文章

M-LAG的基本概念

如图所示&#xff0c;用户侧设备Switch&#xff08;可以是交换机或主机&#xff09;通过M-LAG机制与另外两台设备&#xff08;SwitchA和SwitchB&#xff09;进行跨设备链路聚合&#xff0c;共同组成一个双活系统。这样可以实现SwitchA和SwitchB共同进行流量转发的功能&#xff…

MySQL查出时间比实际晚8小时的解决方案

查询出来的日期数据比数据库中日期数据晚8小时&#xff0c;一开始很懵逼&#xff0c;IDEA 和 server 时区都一样呢&#xff01;后来发现&#xff1a; jdbcUrljdbc:mysql://localhost:hentai?useUnicodetrue&characterEncodingUTF-8&useJDBCCompliantTimezoneShifttru…

C++11单例模式

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

16(第十五章,数据管理成熟度评估)

目录 概述 数据管理成熟度等级 基本概念 评级等级以及特点 现有的DMMA框架 活动 方法 扩展 概述 数据管理成熟度等级 1) 0 级。无能力级。2) 1 级。初始级或临时级&#xff1a;成功取决于个人的能力。3) 2 级。可重复级&#xff1a;制定了最初级的流程规则。4) 3 级。…

【webrtc】m114自己实现的PrioritizedPacketQueue及优先级处理

G:\CDN\WEBRTC-DEV\libwebrtc_build\src\modules\pacing\prioritized_packet_queue.h跟m98不同 :webrtc】m98 RoundRobinPacketQueue的优先级处理,m114直接使用taskqueue顺序处理了。甚至自己实现了优先级队列感觉简化了实现,更为清晰 易读,但是去掉了码率低就优先的逻辑。1…

C 语言实例 - 两个浮点数相乘

输入两个浮点数&#xff0c;计算乘积。 #include <stdio.h>int main() {float num1, num2, product;printf("请输入第一个浮点数: ");scanf("%f", &num1);printf("请输入第二个浮点数: ");scanf("%f", &num2);product …

企业计算机服务器中了rmallox勒索病毒怎么办?Rmallox勒索病毒解密流程工具

在网络飞速发展的时代&#xff0c;企业离不开网络&#xff0c;网络为企业的生产运营提供了极大便利&#xff0c;加快了企业进步的步伐&#xff0c;依靠网络可以开展各项工作业务&#xff0c;通过网络数据整合&#xff0c;可以更方便企业办公。网络在为企业提供便利的同时也为企…

ESLint 、 e2e test 学习

Lint和Format的区别&#xff1a; Lint只会告诉你代码中的错误或者不符合规范的地方&#xff0c;而Format是用来对格式作调整的 HTML/tpl&#xff1a;HTMLLint CSS/SCSS&#xff1a;Stylelint JS/JSX&#xff1a;Eslint JSLint&#xff1a;古老&#xff0c;不能配置和扩展JSHin…

【C++类和对象】日期类的实现

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Post请求中常见的Content-Type类型

Post请求中常见的Content-Type类型的结构 &#xff08;1&#xff09;application/x-www-form-urlencoded 这是浏览器原生的form表单类型&#xff0c;或者说是表单默认的类型。 下面是一个请求实例&#xff1a; 请求报文&#xff1a; 可以看得出&#xff0c;post将请求参数以k…

搭建vue3组件库(一):Monorepo架构搭建

文章目录 1. 以 pnpm 构建 monorepo1.1 全局安装 pnpm1.2 配置 pnpm 的 monorepo 工作区1.3 仓库项目内的包相互调用1.4 TypeScript 初始化配置文件2. 通用配置文件2.1 添加 .editorconfig 编辑器格式配置文件2.2 添加 .gitignore git 忽略文件2.3 添加 .npmrc npm配置文件2.4 …

两个列表联动修改选中标题的时机

在iOS UI中&#xff0c;常常遇到这种场景&#xff0c;就是我们有两个列表&#xff0c;一个 列表是标题&#xff0c;一个列表是分区的内容&#xff0c;我们滚动内容列表的时候&#xff0c;需要选中当前内容列表中对应的标题&#xff0c; 这个时候&#xff0c;我们有多种实现方案…

了解时间复杂度和空间复杂度

在学习数据结构前&#xff0c;我们需要了解时间复杂度和空间复杂度的概念&#xff0c;这能够帮助我们了解数据结构。 算法效率分为时间效率和空间效率 时间复杂度 一个算法的复杂度与其执行的次数成正比。算法中执行基础操作的次数&#xff0c;为算法的时间复杂度。 我们采…

网络安全实训Day23

网络空间安全实训-渗透测试 文件上传攻击 定义 将Webshell文件上传到网站服务器上&#xff0c;从而获得网站整台服务器控制权限的攻击方式 Webshell 一种以网页形式存在的命令行执行环境&#xff0c;又称网页木马 分类 一句话木马 只有一行代码&#xff0c;功能强大&#xff…

【程序分享1】LAMMPS + OVITO + 晶体缺陷识别 + 点缺陷 + 分子动力学模拟

分享2个分子动力学模拟相关的程序。 1. 一种识别体心立方晶体缺陷的新方法。 2. 无后处理的分子动力学模拟中的并行点缺陷识别: lammps的计算和转储方式 。 感谢论文的原作者&#xff01; 第1个程序 关键词&#xff1a; 1. Atomistic simulations, 2. Molecular dynamics…

北京市高级职称破格申报推荐表

北京市高级职称破格申报推荐表 推荐人 基本情况 姓名 证件类型 证件号码 工作单位及职务 专业领域 联系方式 职称 证书编号 授予单位 取得时间 申报人 基本情况 姓名 证件类型 证件号码 工作单位及职务 申报职称 申报级别 申…

PFA容量瓶耐受强酸强碱进口特氟龙材质定容瓶

PFA容量瓶&#xff0c;也叫特氟龙容量瓶&#xff0c;是用于配制标准浓度溶液的实验室器皿&#xff0c;是有着细长颈、梨形肚的耐强腐蚀平底塑料瓶&#xff0c;颈上有标线&#xff0c;可直接配置标准溶液和准确稀释溶液以及制备样品溶液。 因其有着不易碎、材质纯净、化学稳定性…

OpenHarmony实战开发-按钮 (Button)

Button是按钮组件&#xff0c;通常用于响应用户的点击操作&#xff0c;其类型包括胶囊按钮、圆形按钮、普通按钮。Button做为容器使用时可以通过添加子组件实现包含文字、图片等元素的按钮。具体用法请参考Button。 创建按钮 Button通过调用接口来创建&#xff0c;接口调用有…

linux文件相关命令

一、linux文件相关命令 1、cd cd 是 “change directory” 的缩写&#xff0c;用于改变当前工作目录。 cd &#xff1a;不带任何参数时&#xff0c;会切换到用户的主目录&#xff08;通常是 /home/用户名&#xff09;。 cd ~&#xff1a;也会切换到用户的主目录。 cd .&…

Mudem,打造私密安全、高效稳定的私人空间

Mudem 是 Codigger 平台中的一个关键组件&#xff0c;它提供基础通讯服务&#xff0c;确保不同类型的机器之间可以进行安全和高效的连接。它其设计理念在于将本地机器、公有云以及私有云上的设备无缝地整合为一个可远程在线访问的工作站&#xff08;Workstation&#xff09;。这…