你知道可以用 Python 以编程方式下载文件吗?我将向你展示如何使用 Python 获取和保存文件。这个过程称为网络抓取,是任何与数据相关的项目的必要步骤。
网络抓取 是从网站收集数据的过程。虽然用户可以手动完成,但它通常是指借助网络爬虫自动收集数据的方法。
您可以使用 Python 以编程方式完成所有这些操作。读完本文后,您将了解如何使用 Python 下载任何类型的文件,包括 PDF、图像、视频和页面。不同类型的文件之间的下载过程类似。
为了充分利用本文,最好对 Python 编程有基本的了解。此外,为了节省时间并加速您的学习,我建议您查看我们的 Python 编程轨迹 .
要在 Python 中下载文件,我们需要获取并保存它。此过程可以通过调用 API 或仅使用指向您喜欢的 GIF 的常规 Web URL 来完成。
在进一步了解之前,让我们先了解一下 REST API。REST API 是一种服务,它允许您通过 REST 机制访问和操作服务器上的数据,例如文本文件、图像、服务和其他资源的集合。API 有助于提高客户端应用程序的可移植性,并简化产品不同组件的演进过程。这些 API 通常返回 UTF-8 编码的 JSON 对象作为资源。
使用 REST API 时,发出请求有两个基本步骤。首先,客户端访问 REST API 上的特定位置并声明要执行的方法。这称为请求 。 其次,服务器执行该方法并将数据返回给客户端。这称为 响应 .
身份验证是互联网安全的重要组成部分。任何允许客户端访问或修改敏感或关键数据的 REST API 都必须有身份验证系统。即使 API 是免费的,所有者也可能引入身份验证来限制每个用户的请求数量。
和 place.dog 获取并保存 Python 文件 randomfox.ca 。无需身份验证,因此您可以重复使用代码片段以 Python 下载文件。您可以 在此处 .
首先,我们将通过 HTTP 下载 Python 中的文件。稍后,我们将通过 API 下载 Python 中的文件。让我们开始吧!
使用 Python 通过 HTTP 下载文件
在我们的第一个示例中,我们将获取并保存一张 狗的图片 。该网站提供狗的随机图片,您可以将其用作下一个项目的占位符。如果您刷新页面,它会生成另一张狗的图片。
我们将使用
请求
库,它使 HTTP 请求比使用内置
urllib
库更简单。您可能需要
requests
使用以下命令安装该库:
pip install requests
然后,我们导入
requests
用目标 URL
url
设置
GET
请求并检查其状态。以下是编写请求时可能遇到的不同类型的响应状态
GET
:
- 1xx 信息性 。它表示已收到请求,客户端应继续对数据有效负载发出请求。
- 2xx 成功 。它表示请求的操作已被接收、理解和接受。它可以帮助您在处理数据之前验证数据是否存在。
- 3xx 重定向 。它表示客户端必须采取其他操作才能完成请求,例如使用代理或其他端点来访问资源。
- 4xx 客户端错误 。它表示客户端存在问题,例如,不允许的方法、授权问题、禁止访问或尝试访问不存在的资源。
- 5xx 服务器错误 。这表示提供 API 的服务器存在问题。
让我们用 Python 编写一个获取文件的请求。
>>> import requests
>>> url = ' 300/200'
>>> # fetch file
>>> response = requests.get(url, allow_redirects=True)
>>> # Get response status
>>> response.status_code
200
状态
200
码表示请求成功,数据存在。从这里,我们继续下一步,并借助该
write()
方法在 Python 中保存一个文件。
The 200 status code indicates the request is successful and the data exists. From there, we continue to the next step and save a file in Python with the help of the write() method.
现在,该文件已保存为dog1.jpg,并包含一张狗的图片。
为了更好地复习在 Python 中使用 write() 方法保存文件,请查看我关于 如何在 Python 中写入文件的文章。
使用 Python API 下载文件
现在,让我们探索如何通过调用 API 并解析 JSON 文件来在 Python 中获取和保存文件。与之前所做的不同,我们将使用 pathlib .
网上可用的大多数数据都是 JSON(JavaScript 对象表示法)格式。它用于将信息存储在数据库中,是使用现代 REST API 时最常见的数据类型。JSON 数据结构可能是 无序的名称-值对 ,例如字典、哈希表、对象或键列表(具体取决于编程语言),也可能 有序的值列表 ,例如数组、列表和向量。
JSON 可能难以供人类直接阅读和使用。为了解决这个问题,Python 有不同的库来帮助我们读取从 Web 获取的 JSON 数据。其中包括 JSON 库。下表显示了 JSON 和 Python 之间的转换映射:
JSON | Python |
---|---|
目的 | 字典 |
大批 | 列表或元组 |
细绳 | 细绳 |
数字 | 整数或浮点数 |
真的 | 真的 |
错误的 | 错误的 |
无效的 | 没有任何 |
使用 REST API 时,您必须经常处理 JSON 数据。您可以在我们的课程“ 如何在 Python 中读取和写入 JSON 文件”中 .
该
requests
库具有许多功能,但
GET
对于以下示例,
json()
请求和
GET
向要访问的 API 端点创建请求。API 提供了一个包含 JSON 数据的响应对象。我们只对随模块返回的 JSON 数据感兴趣
json()
。
>>> import requests
>>> url = " floof"
>>> # fetch file
>>> response = requests.get(url, allow_redirects=True)
>>> # get json data
>>> json = response.json()
>>> print(json)
{'image': ' images/2.jpg', 'link': ' ?i=2'}
输出
json
类似于 Python 字典。我们提取图像的 URL 如下:
>>> img = json['image']
>>> print(img)
images/2.jpg
接下来,我们要保存图像。如前所述,我们使用
pathlib
面向对象框架来处理文件系统路径。它的优点之一是它在操作系统之间的可移植性更好。您可以
pathlib
在我的文章“
如何重命名文件”
.
为了保存狐狸的图片,我们将使用 Path.write_bytes(data) 方法以二进制/字节模式打开路径并向其中写入数据。
>>> # import Path class from pathlib
>>> from pathlib import Path
>>> # define filename
>>> filename = Path('fox.jpg')
>>> # fetch file
>>> response = requests.get(img)
>>> # save file
>>> filename.write_bytes(response.content)
我们的文件现在已保存为
fox.jpg
。我们刚刚了解了如何通过检查数据来提取 API 响应中的 URL
json
。
关于如何使用 Python 下载文件的总结
我们现在学习了如何通过 HTTP 和 API 使用 Python 下载文件。我鼓励您尝试代码并从不同的 API 获取文件。
JSON 是一种广泛使用且方便的数据存储格式,关于它还有很多东西需要学习。您可以通过我们的 Python 编程 轨迹 .
最后但同样重要的是,反思你的 Python 编程技能总是一个好主意。为了帮助你完成这个过程,请查看我的文章《 可以帮助你编写更好的 Python 代码的事情》 上浏览我们的内容 。坚持每天学习!
发表评论 取消回复