Python教程:使用Requests和Wget模块从Web下载文件的完整指南
在本教程中,您将学习如何使用不同的Python模块从Web下载文件。此外,您将下载常规文件,网页,亚马逊S3和其他资源。

最后,您将学习如何克服可能遇到的各种挑战,例如下载重定向文件,下载大文件,完成多线程下载以及其他策略。
使用请求
您可以使用请求模块从URL下载文件。
考虑以下代码:
您只需要使用请求模块的GET方法获取URL并将结果存储在名为“ myfile”的变量中。然后,将此变量的内容写入文件。
使用WGET
您也可以使用Python的WGET模块从URL下载文件。您可以使用PIP安装WGET模块如下:
考虑以下代码,我们将使用它下载Python徽标图像。
在此代码中,URL和路径(将存储图像的路径)传递给WGET模块的下载方法。
下载重定向文件
在本节中,您将学习如何使用请求从URL下载文件,该文件将通过.pdf文件重定向到另一个URL。 URL看起来像这样:
要下载此PDF文件,请使用以下代码:
在此代码中,我们指定的第一步是URL。然后,我们使用请求模块的GET方法获取URL。在GET方法中,我们将允许_redirects设置为true,这将允许在URL中重定向,并且将重定向后的内容分配给变量myfile。
最后,我们打开一个文件来编写检索到的内容。
在块中下载大文件
考虑以下代码:
首先,我们像以前一样使用请求模块的GET方法,但是这次,我们将将流属性设置为true。
接下来,我们在当前工作目录中创建一个名为pythonbook.pdf的文件,然后打开它供书写。
然后,我们指定每次下载的块大小。我们将其设置为1024字节,然后迭代每个块,然后在文件中写入这些块,直到块结束。
不漂亮吗?不用担心,我们将在下载过程中展示一个进度栏。
下载多个文件(并行/批次下载)
要同时下载多个文件,请导入以下模块:
我们导入了操作系统和时间模块,以检查下载文件所需的时间。 ThreadPool模块允许您使用池运行多个线程或进程。
让我们创建一个简单的功能,将响应发送到块中的文件:
该URL是一个二维数组,指定您要下载页面的路径和网址。
就像上一节中所做的那样,我们将此URL传递给requests.get。最后,我们打开文件(URL中指定的路径)并写入页面内容。
现在,我们可以为每个URL分别调用此功能,也可以同时调用所有URL。让我们为for循环中的每个URL调用此功能,请注意计时器:
现在,用以下代码替换for循环:
运行脚本。
使用进度栏下载
进度条是Clint模块的UI组件。输入以下命令安装Clint模块:
考虑以下代码:
在此代码中,我们首先导入请求模块,然后我们从clint.textui导入进度组件。唯一的区别是for循环。将内容写入文件时,我们使用Progress Bar模块的条方法。
使用Urllib下载网页
在本节中,我们将使用Urllib下载网页。
Urllib库是Python的标准库,因此您无需安装它。
以下代码可以轻松下载网页:
这是为什么要保存文件以及要存储的位置的URL,
在此代码中,我们使用urlretrieve方法并传递文件的URL,以及保存文件的路径。文件扩展名为.html。
通过代理下载
如果您需要使用代理下载文件,则可以使用Urllib模块的代理人。请参阅以下代码:
在此代码中,我们创建一个代理对象,并通过调用Urllib的build_opener方法并传递代理对象来打开代理。然后,我们创建一个请求以获取页面。
此外,您还可以使用官方文档中所述的请求模块:
您只需要导入请求模块并创建代理对象即可。然后,您可以获取文件。
使用Urllib3
Urllib3是Urllib模块的改进版本。您可以使用PIP下载并安装它:
我们将使用URLLIB3并将其存储在文本文件中。
导入以下模块:
处理文件时,我们使用Shutil模块。
现在,我们初始化了这样的URL字符串变量:
然后,我们使用了Urllib3的PoolManager,该Poolmanager跟踪必要的连接池。
创建一个文件:
最后,我们发送get请求以获取URL并打开文件,然后写下对文件的响应:
使用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,请运行以下命令:
现在,导入这两个模块:
从亚马逊下载文件时,我们需要三个参数:
水桶名
您需要下载的文件名称
下载文件后的名称
初始化变量:
现在,我们初始化一个变量以使用会话的资源。为此,我们将调用boto3的资源()方法并将其传递到服务中,即S3:
最后,使用download_file方法下载文件并传递到变量:
使用Asyncio
异步模块主要用于处理系统事件。它可以围绕一个事件循环,该事件循环等待事件发生,然后对该事件做出反应。该反应可以调用另一个功能。此过程称为事件处理。 Asyncio模块使用Coroutines进行事件处理。
要使用Asyncio事件处理和协作,我们将导入Asyncio模块:
现在,定义Asyncio协作方法:
关键字async表示这是本地异步Coroutine。在Coroutine内部,我们有一个等待的关键字,它返回特定值。我们还可以使用返回关键字。
现在,让我们使用一个代码的协作创建来从网站下载文件:
在此代码中,我们创建了一个异步协作函数,该功能下载我们的文件并返回消息。
然后,我们使用另一个异步coroutine调用main_func,该coroutine将等待URL并将所有URL形成队列。 Asyncio的等待功能将等待Coroutine完成。
现在,为了启动Coroutine,我们必须使用Asyncio的get_event_loop()方法将Coroutine放入事件循环中,最后,我们使用Asyncio的Run_until_complete()方法来执行事件循环。
使用Python下载文件很有趣。希望该教程对您有用!
长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等
▲扫描二维码-免费领取
推荐阅读
微软推出Pylance,改善VS Code中的Python体验
可能是最全面的 python 字符串拼接总结(带注释版)
最新 Python 爬虫利器!