18|http库:如何批量下载在线内容,解放鼠标(上)?

在前段时间遇到了下载大量图片的需求。具体来说,是在训练 AI 识别猫时,必须要在电脑中存储大量猫的图片。但搜索到的图片都在网页中,就需要先把它们一个个手动下载下来,再保存,然后才能进行后续的工作。

而且,随着对 AI 训练工作的日益增多,这类需求会越来越丰富,不仅要下载猫的图片,还要下载大量其他各种动物的图片。相信类似这种批量下载网页中的图片的需求,你在工作中会经常遇到。而这类需求,刚好能够使用 Python 的“requests-html”库实现批量下载,提高我们的工作效率。

因此呢,这节就以搜索到的猫的图片为例,讲解一下,我是怎么来批量下载图片的。

批量下载图片的准备工作

把实现图片自动化批量下载的过程,拆分成四段难度逐渐递增的代码。这四段代码分别实现的是以下四个功能:

1. 访问 HTTP 服务器,得到搜索结果的整个网页;

2. 在访问服务器之后下载一张图片;

3. 找到多张图片的相似地址;

4. 提取相似地址,下载多张图片。

前两个功能,是批量下载图片的准备工作和前提。掌握了这两个功能,那么批量下载图片实现起来就容易多了。所以接下来,我们先来学习这两项准备工作。

访问 HTTP 服务端的资源

我们从难度最低的一段代码开始,怎么通过访问 HTTP 服务器,从而得到猫的搜索结果的整个网页。

访问 HTTP 服务器,我需要使用 Python 的第三方库 requests-html 库来实现。虽然 Python 在标准库中也自带了访问服务器 urllib 库,但它的实现代码不够简洁,所以我一般数情况下会使用 requests-html 库替代它,来进行 HTTP 服务器的访问。

使用 reqeusts-html 库,你先需要通过“pip”来安装,再通过 get() 方法访问 HTTP 服务器

安装 requests-html 库的方法,和我们上一讲安装 flask 库是一样的。这里我强调一下,在 Python 中,绝大多数的第三方库,它们的名称和安装包的名称是相同的,所以除了特殊的安装方法外,像这种通用的安装方法,我就不会每次都重复贴出来了。reqeusts 库的安装方法,代码如下:

pip3 install requests-html

在命令行执行后,requests-html 库就安装成功了。接下来,我们就使用它的 get() 方法去请求 HTTP 服务器,而得到的返回数据,就是网页的代码。

相信你还记得在上一讲中,介绍了两种常见的 HTTP 服务端请求的方式,分别是“GET”和“POST”。requests-html 库就是使用了同名函数实现的“GET”方式访问。

那么接下来,将使用 reqeusts 库来访问一个无版权的图片网站,并得到网页的源代码。把代码写出来,供你参考。

from requests_html import HTMLSession

# URL
name = "猫"
url = f"https://unsplash.com/s/photos/{name}"

# 启动
session = HTMLSession()

# GET请求
result = session.get(url)

# 结果
print(result.status_code)
print(result.html.html)

在这段代码中,我用 requests-html 代替浏览器来作为 HTTP 客户端,通过“session.get()”函数,向 upsplash 网站提供的 HTTPS 服务器发起“GET”请求。发送请求后,“result”变量会得到 HTTP 服务端响应的结果,即网页的源代码。

你肯定会有疑问,为什么要用 requests-html 来代替浏览器呢?原因就在于,浏览器得到了网页内容后,如果你想再通过网页下载图片,还需要通过鼠标和网页的交互。这就会带来一个新的问题:交互式命令是不能进行图片的自动化下载的。也就是说,我们必须让交互操作变成非交互操作,才能进行批量下载图片。

总之呢,在这段代码中,使用了 requests-html 代替浏览器实现了一次完整的网址的访问,这一过程为后续的自动化下载打下了坚实的基础。

而在这次网址的访问中,最核心的就是发起“GET”请求了。我把这次完整的“GET”请

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值