python 文件下载、大文件下载、异步批量下载 教程

极客远征说
• 阅读 210

原文来自Python实用宝典python 文件下载、大文件下载、异步批量下载 教程

按照不同的情况,Python下载文件可以分为三种:

  1. 小文件下载
  2. 大文件下载
  3. 批量下载

python 小文件下载

流程:使用request.get请求链接,返回的内容放置到变量r中,然后将r写入到你想放的地方。

python 文件下载、大文件下载、异步批量下载 教程

以下载上述流程图为例子:

python 文件下载、大文件下载、异步批量下载 教程

运行完毕后,它将会被保存到当前文件夹的new文件夹里。

python 大文件下载

我们在小文件下载的时候,是将文件内容暂存到变量里,大家想想,下载大文件的时候还这样做会有什么问题?

很简单,如果你的内存只有8G,结果要下载文件却有10G那么大,那就肯定无法下载成功了。而且本机软件运行占的内存也比较大,如果你的内存只有8G,实际上剩余可用的内存可能低于2G-4G. 这种情况下怎么下载大文件呢?

流式分块下载

原理:一块一块地将内存写入到文件中,以避免内存占用过大。

python 文件下载、大文件下载、异步批量下载 教程

当设置了request.get(stream=True)的时候,就是启动流模式下载,典型特征:在r变量的content被调用的时候才会启动下载。代码如下:

python 文件下载、大文件下载、异步批量下载 教程

Python 批量文件下载

所谓批量下载,当然不是一个一个文件的下载了,比如说我们要下载百度图片,如果一个一个下载会出现两种负面情况:

  1. 如果某个请求堵塞,整个队列都会被堵塞
  2. 如果是小文件,单线程下载太慢

我们的解决方案是使用异步策略。如果你会用scrapy框架,那就轻松许多了,因为它结合了twisted异步驱动架构,根本不需要你自己写异步。不过我们python实用宝典讲的可是教程,还是跟大家说一下怎么实现异步下载:

我们需要使用到两个包,一个是asyncio、一个是aiohttp. asyncio是Python3的原装,但是aiohttp则需要各位使用cmd/Terminal打开,输入以下命令安装:

pip install aiohttp

注意asyncio是单进程并发,不是多线程,也不是多进程,单纯是在一个进程里面异步(切来切去运行),切换的地方用await标记,能够切换的函数用async标记。比如下载异步批量下载两个图片的代码如下:

python 文件下载、大文件下载、异步批量下载 教程

Python异步批量下载

注意: img = await session.get(url)
这时候,在你请求第一个图片获得数据的时候,它会切换请求第二个图片或其他图片,等第一个图片获得所有数据后再切换回来。从而实现多线程批量下载的功能,速度超快,下载超清大图用这个方法可以一秒一张。

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦python 文件下载、大文件下载、异步批量下载 教程有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

python 文件下载、大文件下载、异步批量下载 教程

点赞
收藏
评论区
推荐文章
Irene181 Irene181
4年前
用Python打造批量下载视频并能可视化下载进度的炫酷下载器
大家好,我是Python进阶者,今天给大家整点好玩的,一起来看看吧【一、项目背景】平时宅在家的我们最爱做的事莫过于追剧了,但是有时候了,网络原因,可能会让你无网可上,这个时候那些好看的电视剧和电影自然是无法观看了,本期我们要讲的就是怎样下载这些视频。【二、项目目标】通过Python程序对所感兴趣的视频进行批量下载,正好小编近期看到一些不错的视频,因为想
Wesley13 Wesley13
3年前
java之大文件断点续传
需求:支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验;内网百兆网络上传速度为12MB/S服务器内存占用低支持文件夹上传,文件夹中的文件数量达到1万个以上,且包含层级结构。支持PC端全平台操作系统,Windows,Linux,Mac支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保
Wesley13 Wesley13
3年前
java实现大文件下载(http方式)
java实现大文件下载,基于http方式,控件神马的就不说了。思路:下载文件无非要读取文件然后写文件,主要这两个步骤,主要难点:    1.读文件,就是硬盘到内存的过程,由于jdk内存限制,不能读的太大。    2.写文件,就是响应到浏览器端的过程,http协议是短链接,如果写文件太慢,时间过久,会造成浏览器死掉。知识点:
Stella981 Stella981
3年前
Django开发环境搭建
1、软件安装Python下载地址:https://www.python.org/如果安装windows环境的python记得配置一下环境变量Django下载地址:https://www.djangoproject.com/download/安装方法:解压后,进入命令行,切换到解压后的django目录下执行pythonsetup.pyins
Stella981 Stella981
3年前
Python01 VSCode开发环境和入门程序
1、Python的下载和安装最新版本python3.7.3https://www.python.org/downloads/release/python373/(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.python.org%2Fdo
Stella981 Stella981
3年前
Python MySQLdb 循环插入execute与批量插入executemany性能分析
PythonMySQLdb循环插入execute与批量插入executemany性能分析用Python连接MySQL数据库时,会用到MySQLdb库,这里下载↓↓↓https://pypi.python.org/pypi/MySQLpython/这
Stella981 Stella981
3年前
Python3 下载文件
原文链接: Python3下载文件(https://my.oschina.net/ahaoboy/blog/1612851)Python3 下载文件 importrequestsurl"https://static.oschina.net/uploads/space/2018/0124/212222_L
Stella981 Stella981
3年前
Python 环境搭建
pythonbug集目录\toc\00python模块下载地址pyhton模块下载地址(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.lfd.uci.edu%2F%7Egohlke%2Fpythonlibs%2F)01pythonpip
Wesley13 Wesley13
3年前
unittest框架,漂亮的报告BeautifulReport配置与错误截图详细解说
1.下载BeautifulReport模块下载地址:https://github.com/TesterlifeRaymond/BeautifulReport2.解压与存放路径下载BeautifulReport的完整.ZIP文件,然后解压,把整个文件包放到本地python的/Lib/sitepackages/目录下!(https://im
Stella981 Stella981
3年前
Python+Selenium之HTMLTestRunner
下载HTMLTestRunner模块下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html保存路径:将下载的HTMLTestRunner.py文件复制到Python安装路径下的Lib目录验证:在Python交互模式下引入HTMLTestRunner模块,如系统没有报错,则说明添
python使用最广泛的库介绍
python真的是很好的语言,首先python为我们封装了很多简单又实用的爬虫库。所以今天博主就带领大家认真的学习下python中被广泛实用的爬虫库——requests库。专为python而建,python有史以来被下载的最多的库之一。requests是一