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

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

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()方法执行该事件循环。

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

以上就是使用 Python 下载的11种姿势,一种比一种高级的详细内容,更多请关注昆居客【www.kunjuke.com】。

相关推荐:

kc韩漫官方下载

KC韩漫是高人气的免费漫画阅读平台,拥有丰富多样的漫画书籍可以自由收藏,还涵盖了爱情、恐怖、动作等各种漫画主题,轻松根据自己的兴趣选择相应的漫画来阅读,享受全面的漫画阅读乐趣,同时也具有高质量的漫画阅读体验。 kc韩漫在线阅读免费读漫: kc韩漫官方下载:点此下载 软件功能 1、资源丰富:汇集了大量漫画作品,涵盖了各种类型,以满足不同用户的阅读偏好。 2、高清画质:提供多种阅读模式,包括横向、纵向...

e站官网下载安装

E站官方版app下载一款非常值得推荐的手机漫画阅读平台。软件不仅每天实时更新海量漫画资源,更是拥有非常多强大的功能,用户可以下载自己喜欢的漫画到本地进行阅读,无需担心网络不稳定或者流量问题。同时这款软件还支持多种语言,可以满足全球用户的需求,让用户在使用时更加的便捷和舒适。 e站官网下载安装: e站官网入口网址下载:点此下载 软件优势 1、一切的漫画作品都是能够免费的进行查找和观看的,能够轻松的享...

lanerc下载官网入口

Lanerc是可以免费看漫的二次元动画播放器。收集了国内外丰富的动画资源。即使是热衷于血腥打斗、温馨治愈、奇幻冒险的动漫迷,也能在这里找到适合自己需求的作品。Lanerc软件界面简单易用,每天同步更新最新的视频内容,让用户轻松跟上。下面给大家带来了官网入口分享! lanerc入站答题正确答案大全 lanerc下载官网入口:点击下载 软件亮点 1、支持不同的平台,无论您使用什么设备,您都可以随时随地...

图片编辑工具app下载_图片编辑工具免费下载官方

推荐三款真正免费无内购的图片编辑APP:应用宝电脑版安装腾讯官方工具、安卓端“图片编辑加文字”官方版、iOS端App Store下载“图片编辑大师”,均需认准官方渠道并按指引完成登录或设置。 想在手机上快速给照片加文字、套模板、去水印或拼长图,又不想花钱开会员、被广告弹窗反复打断,就得找对官方渠道下载真正免费且无内购陷阱的图片编辑工具APP。 用应用宝电脑版在Windows上安装图片编辑工具 该方...

Safari浏览器怎么设置下载路径_Safari设置文件下载位置方法【攻略】

Safari下载路径可通过五种方式调整:一、偏好设置指定文件夹;二、终端命令修改DownloadsPath;三、符号链接重定向~/Downloads;四、启用下载前询问;五、按Option键临时另存为。 如果您在Mac上使用Safari浏览器下载文件,但默认保存至“下载”文件夹不符合您的组织习惯或存储策略,则需要手动调整其默认下载位置。Safari不提供一键式全局路径覆盖功能,但可通过图形界面设置...

火狐浏览器怎么开启网络请求底层的高级抓包日志拦截分析_火狐浏览器开发者面板各种高级过滤

需启用火狐底层日志拦截与网络面板高级过滤:一、配置about:config开启全量捕获并禁用心跳探测;二、展开过滤栏启用status-code等结构化指令;三、负向排除200/304等常规状态码聚焦错误;四、用domain+path+type三重组合精准定位业务接口;五、通过Initiator、Waterfall和cURL溯源调用链与性能瓶颈。 如果您在火狐浏览器中已打开网络面板并捕获到大量请求,...

宙斯浏览器为什么下载速度慢_宙斯浏览器多线程下载加速设置

宙斯浏览器下载慢因内置下载器默认单连接,需通过三步解决:一、授存储、修改系统设置等权限;二、视频播放15秒后双击触发高速下载;三、复制链接交由系统下载管理器启用3–5线程。 宙斯浏览器下载速度慢是因为其内置下载器默认采用单连接机制,无法像系统下载管理器或Chrome那样自动启用多线程分块下载,导致大文件始终卡在低速状态,哪怕你的宽带是千兆光纤也跑不满。 开启系统级多线程下载(推荐首选) 这一步绕过...