原文来自Python实战宝典:python文件下载、大文件下载、异步批量下载教程根据不同情况,Python下载文件可分为三种类型:小文件下载大文件下载批量下载python小文件下载流程:使用request.get请求一个链接,将返回的内容放入变量r中,然后将r写入你想放的地方。以下载上面的流程图为例:运行后会保存在当前文件夹的新建文件夹中。Python大文件下载当我们下载一个小文件时,我们会把文件内容暂时存放在一个变量中。想一想,下载大文件的时候这样做有什么不妥?很简单,如果你的内存只有8G,但是你要下载的文件有10G那么大,那肯定下载不成功。而且原生软件占用的内存比较大。如果你的内存只有8G,那么剩余的可用内存实际上可能还不到2G-4G。在这种情况下如何下载大文件?流式分块下载的原理:将内存逐块写入文件,避免内存占用过大。设置request.get(stream=True)时,开始流模式下载。典型特征:只有调用了r变量的内容才会开始下载。代码如下:Python批量文件下载所谓批量下载当然不是逐个文件下载。比如我们要下载百度图片,如果我们一张一张下载,就会出现两种消极情况:如果某个请求被阻塞,那么整个队列都会被阻塞。如果是小文件,单线程下载太慢了。我们的解决方案是使用异步策略。如果能使用scrapy框架就简单多了,因为它结合了twisted异步驱动架构,完全不用写异步。不过我们的Python实战宝典讲的是教程。下面我来告诉大家如何实现异步下载:我们需要用到两个包,一个是asyncio,一个是aiohttp。asyncio是Python3的原生库,但是aiohttp需要你用cmd打开/终端,输入如下命令安装:pipinstallaiohttp注意asyncio是单进程并发库,不是多线程,也不是多进程,它只是一个进程中的异步(cuttocutandrun),切换标记为await,可以切换的函数标记为async。比如下载两张图片异步批量下载的代码如下:Python异步批量下载注意:img=awaitsession.get(url)这时候当你请求第一张图片获取数据时,会切换到请求第二个图像或另一个图像,并在第一个图像具有所有数据后切换回来。这样就实现了多线程批量下载的功能,速度超快。使用此方法下载超高清大图,每秒可下载一张。这是我们文章的结尾。如果你今天想要我们的Python教程,请继续关注我们。如果对您有帮助,请在下方点赞或观看。如果您有任何问题,可以在下方留言区留言。我们会耐心解答!Python实战宝典(pythondict.com)不只是一个合集欢迎关注公众号:Python实战宝典
