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

2024-04-21 05:52

本文主要是介绍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)

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

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

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

 

这篇关于python爬虫-----深入了解 requests 库下篇(第二十五天)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/922294

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝