requests下载大文件_11种方法教你用Python高效下载资源!

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

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

1

使用requests

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

考虑以下代码:

93808ad31dd08d741cfe77b70c5a3455.png

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

2

使用wget

f0c58a4c2ccfecb21fb87840e853d444.png

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

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

93e547279118784eb12b69febc085abd.png

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

3

下载重定向的文件

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

d352102b0d6a740047cfbd731cded1e6.png

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

1eb27dc8ec8383cc03f5fadf121943ed.png

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

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

4

分块下载大文件

考虑下面的代码:

d4b9f605a03c96e0e70ca2d901761541.png

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

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

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

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

5

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

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

c203d845863cc35bc6fd41092c636f40.png

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

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

110bc6926267cc88f0bf89fb1539a9a4.png

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

a1588ff117e0a9826e214ab4982717a6.png

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

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

134e423a16165a291b46557446eac956.png

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

e1ccab677e7bbae8c9c38648d5a40a5d.png

运行该脚本。

6

使用进度条进行下载

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

f2a65046a7ca0e7c2603a1ab8d3c98f4.png

考虑以下代码:

208f151aecf35b0940e1de38fd0ece62.png

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

7

使用urllib下载网页

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

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

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

d00c8edca21bfbe918a6d60e2f160ffe.png

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

a3f210d61864553a67a665e73dff6315.png

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

8

通过代理下载

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

17327de26727cb2c3fa8048d5d51a0e2.png

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

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

ebc8949e7b3f7b1e91812035276c77ae.png

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

9

使用urllib3

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

8322b2b72d90848108da5ef94485ffa6.png

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

导入以下模块:

84311a3bb09358ef192876ead7c71bd9.png

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

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

b93e6744ba247d1a9fe4b82f37ade9d8.png

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

1ae053cc3d8e818102de6b8b119d7ca3.png

创建一个文件:

6bb67128b69543662f0e42d1caea7109.png

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

05ff727de2e6cfd0d975961d2533aa83.png

10

使用Boto3从S3下载文件

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

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

30220e6d20589b7c8a3bbe2e0f2a64b8.png

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

a81c71333edb1a2a7ff6d57c3b323c58.png

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

68bc3e82e27e7bc3430f4938a14f3133.png

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

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

233f444d1e019856dfa7f6f935e81559.png

现在,导入这两个模块:

6a81c3bd3303d9fc21e34d09f80526d9.png

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

  • Bucket名称

  • 你需要下载的文件名称

  • 文件下载之后的名称

初始化变量:

0d74469abbd01892b96340f633053ed2.png

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

4669db756bcec46470e1d36df534c8a3.png

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

1438ec11b6b30258e61b2d97297f4970.png

11

使用asyncio

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

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

70790d0956f904f822c6fb41d5a0d08c.png

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

8f0d86f84198e254583d9cf1ec9c5353.png

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

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

16c935d01ac689a907e4637187eb32c0.png

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

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

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

使用Python下载文件是很有趣的。希望本教程对你有用!

END -本文为转载分享&推荐阅读,若侵权请联系后台删除

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

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

相关文章

android自定义push通知_20个海外Web和App推送通知服务工具

在App和网站中使用推送通知有不同的原因,并且在提高流量和与客户互动方面有很多好处。推送通知是一种交互式可点击消息,可将访问者直接引导至你的网站。它们可以帮助你以指数方式增加流量和参与率。因此,营销人员,广告商&#xff…

linux 删除文件_Linux删除文件夹命令有哪些

今天要和大家分享的Linux常用命令是Linux删除文件夹命令,Linux删除文件夹很简单,常用的命令有rmdir和rm,以下分别介绍一下,大家根据情况选择使用即可。 Linux删除文件夹命令有哪些 ①Linux删除文件夹命令:rmdir rmdir命令使用场景: 当有空目录要删除时,可使用rmdir指令。…

url上接收到 el表达式 不渲染_一文摸透从输入URL到页面渲染的过程

一文摸透从输入URL到页面渲染的过程从输入URL到页面渲染需要Chrome浏览器的多个进程配合,所以我们先来谈谈现阶段Chrome浏览器的多进程架构。一、Chrome架构目前Chrome采用的是多进程的架构模式,可分为主要的五类进程,分别是:浏览…

模拟弱网工具的使用

https://zhuanlan.zhihu.com/p/98185153 https://www.jianshu.com/p/5e35a3585df5 今年5G技术开始铺开并进入商用。随着5G的到来,不知道大家有没有和我一样的感受,希望是我心理作用吧,我发现作为一个4G用户,最近我的手机网速是不…

c语言计算a+aa+aaa_物业服务企业信用等级公布,42家获AAA级!你家小区物业怎么样?...

杭州住保房管 根据《浙江省物业服务企业信用信息管理办法》和《浙江省行业信用监管责任体系构建工作方案》,日前,省建设厅公布了 2020年度浙江省物业服务企业信用等级结果名单,杭州165家物业服务企业上榜,绿城物业服务集团有限公司…

python 可视化_python可视化基础

常用的python可视化工具包是matplotlib,seaborn是在matplotlib基础上做的进一步封装。入坑python可视化,对有些人来说如同望山跑死马,心气上早输了一节。其实学习一门新知识,首先要掌握的是这门知识的最少最核心知识,剩…

使用post访问不到接口_Postman工具使用说明

一、工具说明接口测试工具,支持post,get,请求的接口测试;支持参数中带token,带cookie等接口测试。印度阿三开发的产品,稳定性较好,强烈推荐,屡试很爽。适用:前后端分离的…

java正则表达式判断手机号_正则表达式学习之简单手机号和邮箱练习

正则表达式的组成规则在java中,正则表达式的编译是类java.util.regex.Pattern正则表达式的构造摘要1.字符x包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号的普通字符。比如之前的例子可以将[1-9][0-9]{4,12}改成1[0-9]{4,12}或者a[0-9]{4,12}此时就…

unity 解决引入dlopen api的问题

打包出来的ipa在腾讯的wetest的ios预审中报以下错误。 对于dlopen api, 是苹果禁用的,对Unity项目痛苦的挨个二分排查后,发现很多都有可能引入。 1.和XML或Excel相关的C# API极有可能引入。https://blog.csdn.net/qq_36622009/article/details/10388285…

运营体系_用户运营系统论:解构复杂产品的大规模用户运营体系

本文介绍了大规模用户运营体系中的三大原则——数据驱动、精细化运营、自动化(或叫产品化),以及用户运营体系中的三个子系统——用户生命周期管理系统、用户分层运营系统、用户行为激励系统。我们在实际的产品工作中,经常会用到各种各样的运营体系&#…

ShaderToy效果学习(转成Unity URP) - MathEye

来自IQ大神的小教程,效果图: shaderToy源码:https://www.shadertoy.com/view/lsfGRr 教程视频:https://www.bilibili.com/video/BV1KK4y1K7wM/ Unity项目代码Git地址:https://github.com/Dejavu0709/Graphics.git Sh…

asp 退出登录修改cookie能进入后台_深入浅出让你理解跨域与SSO单点登录原理与技术...

一:SSO体系结构SSOSSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务…

是可改写的随机存储器_关于存储器的一些基础知识整理

RAMRandom-Access-Memory,随机存储存储器,可读可写,分为SRAM和DRAM,即静态随机存储器和动态随机存储器,理解上静动态主要体现是否需要刷新,通常DRAM需要刷新,否则数据将丢失;SRAM的效率较好,而成…

fpga供电电压偏低会怎样_[走近FPGA]之开发板介绍篇

开发板概述在走近FPGA预告篇中,我们已经提到了系列文章使用的开发平台,硬木课堂Xilinx Artix 7 FPGA板,如下图所示。它使用的FPGA芯片型号为Xilinx Artix-7 XC7A75T,具有电平开关、LED、矩阵键盘、数码管等基本外设,同…

使用arm-linux-androideabi-addr2line 定位Unity Android 段错误

arm-linux-androideabi-addr2line是NDK中提供的将内存地址转换成行号的一个工具,通俗具体点就是根据各种日志,譬如trace日志和tomestone日志中包含的so库日志的中偏移内存地址,定位到具体是在那个文件的那一行。Unity的安装目录中&#xff0c…

springboot几种注入_Spring Boot中使用JdbcTemplate访问数据库

本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例。数据源配置在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式。首先,为了连接数据库需要引入jdbc支持,在pom…

搜索重复代码_LeetCode专题——详解搜索算法中的搜索策略和剪枝

今天是LeetCode专题第20篇文章,今天讨论的是数字组合问题。描述给定一个int类型的候选集,和一个int类型的target,要求返回所有的数字组合,使得组合内所有数字的和刚好等于target。注意:所有的元素都是正数所有元素没有…

Unity内实现Android APK版本更新

最近做项目有个需求是要Android应用内强更包体。Google一波直接选了一个android原生开源项目 GitHub - yangchong211/YCUpdateApp: 轻量级版本更新弹窗,弹窗上支持更新进度条,可以设置普通更新或者强制更新。解决8.0以上通知栏不显示问题,解…

a标签隐藏真实地址_家庭影院布线非常杂乱应该怎么补救?A/V电缆管理的7个技巧...

家庭影院应该是给人带来快乐的东西,不管是声音还是外观,但是如果您布的线很杂乱,那么想必整个影院也好看不到哪去,如果你想要整理的话,那么这篇文章应该能帮助到您。有没有整理过家庭影院的电线,观感是完全…

螺钉装弹垫平垫机器人_【经验总结】什么时候用平垫,什么时候用弹垫?

很多人为了节约成本想省了平垫或者弹垫,其实在螺栓使用过程中平垫和弹垫各自起着不可或缺的作用。今天咱们来针对平垫和弹垫给大家介绍一下。左 平 垫 右 弹 垫 平垫,形状一般是一个平垫圈,中间有一个孔,主要是用铁板冲压出来的&a…