前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 下载的 11 种姿势,一种比一种高级!

Python 下载的 11 种姿势,一种比一种高级!

作者头像
生信交流平台
发布于 2022-09-21 05:48:48
发布于 2022-09-21 05:48:48
8920
举报

在本教程中,你将学习如何使用不同的Python模块从web下载文件。此外,你将下载常规文件、web页面、Amazon S3和其他资源。

最后,你将学习如何克服可能遇到的各种挑战,例如下载重定向的文件、下载大型文件、完成一个多线程下载以及其他策略。

1、使用requests

你可以使用requests模块从一个URL下载文件。

考虑以下代码:

你只需使用requests模块的get方法获取URL,并将结果存储到一个名为“myfile”的变量中。然后,将这个变量的内容写入文件。

2、使用wget

你还可以使用Python的wget模块从一个URL下载文件。你可以使用pip按以下命令安装wget模块:

考虑以下代码,我们将使用它下载Python的logo图像。

在这段代码中,URL和路径(图像将存储在其中)被传递给wget模块的download方法。

3、下载重定向的文件

在本节中,你将学习如何使用requests从一个URL下载文件,该URL会被重定向到另一个带有一个.pdf文件的URL。该URL看起来如下:

要下载这个pdf文件,请使用以下代码:

在这段代码中,我们第一步指定的是URL。然后,我们使用request模块的get方法来获取该URL。在get方法中,我们将allow_redirects设置为True,这将允许URL中的重定向,并且重定向后的内容将被分配给变量myfile。

最后,我们打开一个文件来写入获取的内容。

4、分块下载大文件

考虑下面的代码:

首先,我们像以前一样使用requests模块的get方法,但是这一次,我们将把stream属性设置为True。

接着,我们在当前工作目录中创建一个名为PythonBook.pdf的文件,并打开它进行写入。

然后,我们指定每次要下载的块大小。我们已经将其设置为1024字节,接着遍历每个块,并在文件中写入这些块,直到块结束。

不漂亮吗?不要担心,稍后我们将显示一个下载过程的进度条。

5、下载多个文件(并行/批量下载)

要同时下载多个文件,请导入以下模块:

我们导入了os和time模块来检查下载文件需要多少时间。ThreadPool模块允许你使用池运行多个线程或进程。

让我们创建一个简单的函数,将响应分块发送到一个文件:

这个URL是一个二维数组,它指定了你要下载的页面的路径和URL。

就像在前一节中所做的那样,我们将这个URL传递给requests.get。最后,我们打开文件(URL中指定的路径)并写入页面内容。

现在,我们可以分别为每个URL调用这个函数,我们也可以同时为所有URL调用这个函数。让我们在for循环中分别为每个URL调用这个函数,注意计时器:

现在,使用以下代码行替换for循环:

运行该脚本。

6、使用进度条进行下载

进度条是clint模块的一个UI组件。输入以下命令来安装clint模块:

考虑以下代码:

在这段代码中,我们首先导入了requests模块,然后,我们从clint.textui导入了进度组件。唯一的区别是在for循环中。在将内容写入文件时,我们使用了进度条模块的bar方法。

7、使用urllib下载网页

在本节中,我们将使用urllib下载一个网页。

urllib库是Python的标准库,因此你不需要安装它。

以下代码行可以轻松地下载一个网页:

在这里指定你想将文件保存为什么以及你想将它存储在哪里的URL。

在这段代码中,我们使用了urlretrieve方法并传递了文件的URL,以及保存文件的路径。文件扩展名将是.html。

8、通过代理下载

如果你需要使用代理下载你的文件,你可以使用urllib模块的ProxyHandler。请看以下代码:

在这段代码中,我们创建了代理对象,并通过调用urllib的build_opener方法来打开该代理,并传入该代理对象。然后,我们创建请求来获取页面。

此外,你还可以按照官方文档的介绍来使用requests模块:

你只需要导入requests模块并创建你的代理对象。然后,你就可以获取文件了。

9、使用urllib3

urllib3是urllib模块的改进版本。你可以使用pip下载并安装它:

我们将通过使用urllib3来获取一个网页并将它存储在一个文本文件中。

导入以下模块:

在处理文件时,我们使用了shutil模块。

现在,我们像这样来初始化URL字符串变量:

然后,我们使用了urllib3的PoolManager ,它会跟踪必要的连接池。

创建一个文件:

最后,我们发送一个GET请求来获取该URL并打开一个文件,接着将响应写入该文件:

10、使用Boto3从S3下载文件

要从Amazon S3下载文件,你可以使用Python boto3模块。

在开始之前,你需要使用pip安装awscli模块:

对于AWS配置,请运行以下命令:

现在,按以下命令输入你的详细信息:

要从Amazon S3下载文件,你需要导入boto3和botocore。Boto3是一个Amazon SDK它允许Python访问Amazon web服务(如S3)。Botocore提供了与Amazon web服务进行交互的命令行服务。

Botocore自带了awscli。要安装boto3,请运行以下命令:

现在,导入这两个模块:

在从Amazon下载文件时,我们需要三个参数

  • Bucket名称
  • 你需要下载的文件名称
  • 文件下载之后的名称

初始化变量:

现在,我们初始化一个变量来使用会话的资源。为此,我们将调用boto3的resource()方法并传入服务,即s3:

最后,使用download_file方法下载文件并传入变量:

11、使用asyncio

asyncio模块主要用于处理系统事件。它围绕一个事件循环进行工作,该事件循环会等待事件发生,然后对该事件作出反应。这个反应可以是调用另一个函数。这个过程称为事件处理。asyncio模块使用协同程序进行事件处理。

要使用asyncio事件处理和协同功能,我们将导入asyncio模块:

现在,像这样定义asyncio协同方法:

关键字async表示这是一个原生asyncio协同程序。在协同程序的内部,我们有一个await关键字,它会返回一个特定的值。我们也可以使用return关键字。

现在,让我们使用协同创建一段代码来从网站下载一个文件:

在这段代码中,我们创建了一个异步协同函数,它会下载我们的文件并返回一条消息。

然后,我们使用另一个异步协同程序调用main_func,它会等待URL并将所有URL组成一个队列。asyncio的wait函数会等待协同程序完成。

现在,为了启动协同程序,我们必须使用asyncio的get_event_loop()方法将协同程序放入事件循环中,最后,我们使用asyncio的run_until_complete()方法执行该事件循环。

希望大家遇到下载需求时可以有所参考!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信交流平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
利用光场进行深度图估计(Depth Estimation)算法之二——匹配算法
光场相机由于能够捕获相机内部光线的强度和方向而得到整个光场,可以实现重聚焦(refocus)和视角变换等功能。进而可以进行深度估计获取深度图,前面说过利用重聚焦的图像进行深度估计,今天说一下利用不同视角的图像进行深度估计。 仍然是以Lytro Illum为例 由于每一个微透镜后面的15*15个像素能够记录来自主镜头的225条光线信息,因此取每一个微透镜后面同一位置的像素可以得到一个视角下的图像,遍历15*15个像素,就能够得到225个不同视角下的图像。这些图像之间视角上又偏移,即视差,可以使用匹配的方法进行
一棹烟波
2018/01/12
2.2K0
利用光场进行深度图估计(Depth Estimation)算法之二——匹配算法
Mars说光场(3)— 光场采集
沉浸感按:光场技术是目前最受追捧的下一代显示技术,谷歌、Facebook、Magic Leap等国内外大公司都在大力布局。然而目前国内对光场(Light Field)技术的中文介绍十分匮乏,曹煊博士《Mars说光场》系列文章旨在对光场技术及其应用的科普介绍。
马上科普尚尚
2020/05/13
1.2K0
Mars说光场(3)— 光场采集
【计算摄影】先拍照后对焦,浅析基于深度估计的景深编辑与背景虚化
大家好,这是专栏《计算摄影》的第四篇文章,这一个专栏来自于计算机科学与摄影艺术的交叉学科。今天我们讨论的问题是关于深度估计和景深编辑。
用户1508658
2020/11/19
1.4K0
【计算摄影】先拍照后对焦,浅析基于深度估计的景深编辑与背景虚化
利用光场进行深度图估计(Depth Estimation)算法之一——聚焦算法
前面几篇博客主要说了光场相机,光场相机由于能够记录相机内部整个光场,可以实现重聚焦(模糊线索)和不同视角的变换(视差线索),同时也可以利用这个特性进行深度估计(Depth Estimation)。 先说一下利用重聚焦得到的不同聚焦平面图像获取深度图(模糊线索 ,defocus),其实这个原理非常简单。 1. 以聚焦范围为0.2F-2F为例,alpha∈(0.2,2),取Depth Resolution=256, 那么步长就为(2-0.2)/256,我们通过重聚焦算法可以获取得到这个范围内的256幅重聚焦图像
一棹烟波
2018/01/12
1.9K1
利用光场进行深度图估计(Depth Estimation)算法之一——聚焦算法
基于深度学习的单目深度估计综述
深度估计是计算机视觉领域的一个基础性问题,其可以应用在机器人导航、增强现实、三维重建、自动驾驶等领域。而目前大部分深度估计都是基于二维RGB图像到RBG-D图像的转化估计,主要包括从图像明暗、不同视角、光度、纹理信息等获取场景深度形状的Shape from X方法,还有结合SFM(Structure from motion)和SLAM(Simultaneous Localization And Mapping)等方式预测相机位姿的算法。其中虽然有很多设备可以直接获取深度,但是设备造价昂贵。也可以利用双目进行深度估计,但是由于双目图像需要利用立体匹配进行像素点对应和视差计算,所以计算复杂度也较高,尤其是对于低纹理场景的匹配效果不好。而单目深度估计则相对成本更低,更容易普及。
计算机视觉
2021/03/17
2K0
基于深度学习的单目深度估计综述
​使用端到端立体匹配网络进行单次 3D 形状测量,用于散斑投影轮廓测量
标题:Single-shot 3D shape measurement using an end-to-end stereo matching network for speckle projection profilometry
3D视觉工坊
2021/12/17
1K0
​使用端到端立体匹配网络进行单次 3D 形状测量,用于散斑投影轮廓测量
基于深度学习的三维重建算法综述
目前,三维重建技术已在游戏、电影、测绘、定位、导航、自动驾驶、VR/AR、工业制造以及消费品领域等方面得到了广泛的应用。方法同样也层出不穷,我们将这些方法依据原理分为两类:
3D视觉工坊
2020/12/11
1.8K0
基于深度学习的三维重建算法综述
Facebook实时人体姿态估计:Dense Pose及其应用展望
Facebook 和 Inria France 的研究人员分别在 CVPR 2018 和 ECCV 2018 相继发表了两篇有关「人体姿态估计」(human pose estimation) 的文章 [1] [2],用于介绍他们提出的 Dense Pose 系统以及一个应用场景「密集姿态转移」(dense pose transfer)。
机器之心
2019/03/06
8000
Facebook实时人体姿态估计:Dense Pose及其应用展望
光场相机重聚焦原理之——光场的参数化表征
博主最近在搞光场相机方面的研究啦,好了废话不多说,开始!  1. 一些前言废话 首先,来一下光场的基本概念,来自百度百科。光场(light field):就是指光在每一个方向通过每一个点的光量。从概念里,你至少可以得到两点信息:1.光场包含光的方向;2.光场包含一个点的光量。 那光场相机是个什么东西,和我们平常的相机有什么区别呢? 其实光场相机也是一个相机。。好吧有点儿啰嗦。我们知道普通的相机拍照成像,得到的离散的像素点,每一个像素都会有其像素值,那么这个像素值反应的就是光场中某一点的光量,仅此而已,我们不
一棹烟波
2018/01/12
2.5K0
光场相机重聚焦原理之——光场的参数化表征
多视图立体匹配MVSNet网络解析:保姆级教程
论文题目:MVSNet: Depth Inference for Unstructured Multi-view Stereo, (ECCV2018 Oral)
计算机视觉
2021/04/30
3.4K0
多视图立体匹配MVSNet网络解析:保姆级教程
3D 人体姿态估计简述
3D Human Pose Estimation(以下简称 3D HPE )的目标是在三维空间中估计人体关键点的位置。3D HPE 的应用非常广泛,包括人机交互、运动分析、康复训练等,它也可以为其他计算机视觉任务(例如行为识别)提供 skeleton 等方面的信息。关于人体的表示一般有两种方式:第一种以骨架的形式表示人体姿态,由一系列的人体关键点和关键点之间的连线构成;另一种是参数化的人体模型(如 SMPL [2]),以 mesh 形式表示人体姿态和体型。
OpenMMLab 官方账号
2022/02/15
3.4K0
3D 人体姿态估计简述
Google 6DOF视频生成与编解码:身临其境
原标题:Google 6DOF videos review: move inside VR videos
用户1324186
2020/11/02
1.2K0
Google 6DOF视频生成与编解码:身临其境
基于三角测量与稠密化稀疏点的深度估计网络 (ECCV2020)
论文题目:DELTAS: Depth Estimation by Learning Triangulation And densification of Sparse points (ECCV2020)
3D视觉工坊
2021/07/27
7030
光流估计——从传统方法到深度学习
近年来,深度学习技术,作为一把利剑,广泛地应用于计算机视觉等人工智能领域。如今时常见诸报端的“人工智能时代”,从技术角度看,是“深度学习时代”。光流估计是计算机视觉研究中的一个重要方向,然而,因为其不容易在应用中“显式”地呈现,而未被大众熟知。随着计算机视觉学界从图像理解转向视频理解,互联网用户从发布图片朋友圈转向发布短视频,人们对视频的研究和应用的关注不断增强。光流估计作为视频理解的隐形战士,等着我们去寻找其踪迹。本文首先介绍了什么是视频光流估计;再介绍光流估计的算法原理,包括最为经典的Lucas-Kanade算法和深度学习时代光流估计算法代表FlowNet/FlowNet2;最后,介绍了视频光流估计的若干应用。希望对光流估计的算法和应用有个较为全面的介绍。
用户9831583
2022/06/16
1.4K0
光流估计——从传统方法到深度学习
弯曲矫正技术概述
电子文档由于更容易存档、编辑、签名和共享,越来越多的文档需电子化,随着高质量摄像头在手机等移动设备上的普及,利用移动设备对文档进行数字化采集已经非常普遍。通过图像校正与图像质量提升,移动设备采集的文档图像质量甚至可以与专用的文档扫描仪相当。然而,文档总是由于纸张几何形状和捕获条件不受控制而形变。这阻碍了形变图像的信息提取,降低可读性,对数据增强和下游任务如OCR识别、版面分析与还原等任务增加难度。
合合技术团队
2022/09/30
9280
弯曲矫正技术概述
焦点捕捉:光场成像技术在虚拟现实中的应用
光场成像技术是一种先进的成像方法,它记录了从场景中发出的光的方向信息,而不仅仅是强度。这种技术在虚拟现实(VR)中具有巨大的应用潜力,因为它允许用户与三维场景进行更自然的交互,并提供更逼真的沉浸式体验。本文将探讨光场成像技术的原理、在虚拟现实中的应用,以及面临的挑战和未来的发展方向。
数字扫地僧
2024/05/03
6580
基于深度学习的图像匹配技术一览
来源丨https://mp.weixin.qq.com/s/8ilO_X_uEfMMQDNwzLSaUQ
3D视觉工坊
2021/01/13
2.9K0
基于深度学习的图像匹配技术一览
vSLAM技术综述
SLAM是“Simultaneous Localization And Mapping”的缩写,可译为同步定位与建图。概率 SLAM 问题 (the probabilistic SLAM problem) 起源于 1986 年的IEEE Robotics and Automation Conference 大会上,研究人员希望能将估计理论方法 (estimation-theoretic methods) 应用在构图和定位问题中。 SLAM最早被应用在机器人领域,其目标是在没有任何先验知识的情况下,根据传感器数据实时构建周围环境地图,同时根据这个地图推测自身的定位[1]。
SIGAI学习与实践平台
2019/01/23
3.8K0
vSLAM技术综述
物体的三维识别与6D位姿估计:PPF系列论文介绍(二)——PPF-MEAM
圈里有高质量教程资料、可答疑解惑、助你高效解决问题 文章“Point Pair Feature-Based Pose Estimation with Multiple Edge Appearance Models (PPF-MEAM) for Robotic Bin Picking”2018年发表在《Sensors》,是近年来ppf方法的一个代表性的继承与发展。 一、算法主要框架
3D视觉工坊
2020/12/11
1.5K0
物体的三维识别与6D位姿估计:PPF系列论文介绍(二)——PPF-MEAM
RAL2022 | SO-SLAM:具有尺度比例和对称纹理约束的语义物体 SLAM
作者:Ziwei Liao, Yutong Hu, Jiadong Zhang, Xianyu Qi, Xiaoyu Zhang, Wei Wang*
3D视觉工坊
2022/06/28
9380
RAL2022 | SO-SLAM:具有尺度比例和对称纹理约束的语义物体 SLAM
推荐阅读
相关推荐
利用光场进行深度图估计(Depth Estimation)算法之二——匹配算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档