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

发表于:2022-7-11 09:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:Python人工智能技术

  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下载文件是很有趣的。希望本教程对你有用!
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号