Python下载的11种姿势(小结)


Posted in Python onNovember 18, 2020

1、使用requests

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

考虑以下代码:

Python下载的11种姿势(小结)

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

2、使用wget

Python下载的11种姿势(小结)

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

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

Python下载的11种姿势(小结)

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

3、下载重定向的文件

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

Python下载的11种姿势(小结)

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

Python下载的11种姿势(小结)

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

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

4、分块下载大文件

考虑下面的代码:

Python下载的11种姿势(小结)

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

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

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

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

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

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

Python下载的11种姿势(小结)

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

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

Python下载的11种姿势(小结)

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

Python下载的11种姿势(小结)

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

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

Python下载的11种姿势(小结)

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

Python下载的11种姿势(小结)

运行该脚本。

6、使用进度条进行下载

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

Python下载的11种姿势(小结)

考虑以下代码:

Python下载的11种姿势(小结)

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

7、使用urllib下载网页

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

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

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

Python下载的11种姿势(小结)

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

Python下载的11种姿势(小结)

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

8、通过代理下载

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

Python下载的11种姿势(小结)

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

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

Python下载的11种姿势(小结)

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

9、使用urllib3

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

Python下载的11种姿势(小结)

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

导入以下模块:

Python下载的11种姿势(小结)

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

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

Python下载的11种姿势(小结)

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

Python下载的11种姿势(小结)

创建一个文件:

Python下载的11种姿势(小结)

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

Python下载的11种姿势(小结)

10、使用Boto3从S3下载文件

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

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

Python下载的11种姿势(小结)

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

Python下载的11种姿势(小结)

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

Python下载的11种姿势(小结)

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

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

Python下载的11种姿势(小结)

现在,导入这两个模块:

Python下载的11种姿势(小结)

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

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

初始化变量:

Python下载的11种姿势(小结)

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

Python下载的11种姿势(小结)

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

Python下载的11种姿势(小结)

11、使用asyncio

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

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

Python下载的11种姿势(小结)

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

Python下载的11种姿势(小结)

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

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

Python下载的11种姿势(小结)

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

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

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

到此这篇关于Python下载的11种姿势(小结)的文章就介绍到这了,更多相关Python下载方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python验证码识别处理实例
Dec 28 Python
python logging 日志轮转文件不删除问题的解决方法
Aug 02 Python
Python 的类、继承和多态详解
Jul 16 Python
Python实现字典去除重复的方法示例
Jul 31 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
python实现批量解析邮件并下载附件
Jun 19 Python
基于python3实现socket文件传输和校验
Jul 28 Python
Python  unittest单元测试框架的使用
Sep 08 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
python+opencv3生成一个自定义纯色图教程
Feb 19 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 #Python
Opencv python 图片生成视频的方法示例
Nov 18 #Python
calendar在python3时间中常用函数举例详解
Nov 18 #Python
Python 远程开关机的方法
Nov 18 #Python
python 元组和列表的区别
Dec 30 #Python
基于Python爬取搜狐证券股票过程解析
Nov 18 #Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
Nov 18 #Python
You might like
javascript,php获取函数参数对象的代码
2011/02/03 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
对PHP新手的一些建议(PHP学习经验总结)
2014/08/20 PHP
php实现的mongodb操作类
2015/05/28 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
Yii实现简单分页的方法
2016/04/29 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
[58:00]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第二场 2月7日
2021/03/11 DOTA
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
详解如何减少python内存的消耗
2019/08/09 Python
python:动态路由的Flask程序代码
2019/11/22 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
大学生个人总结的自我评价
2013/10/05 职场文书
自我评价范文
2013/12/22 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
先进个人自荐书
2015/03/06 职场文书
大学生实习介绍信
2015/05/05 职场文书