Python练手:批量下载赛尔号精灵图片

Python介绍以及安装方法

Python是一种编程语言,最大的特点就是易学、方便。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言。
关于Python编程环境的安装方法,请参考这篇文章:《如何安装python环境》。
或者直接访问 https://www.python.org/downloads/ 自行下载安装即可,安装过程比较简单。
由于需要照顾到绝大多数网友,因此,本文讲解编程练手使用的开发工具为Python自带的IDLE (Python 3.x xx-bit),各位习惯使用其他开发工具的网友也可以使用自己喜欢的工具。
安装好Python后,点击开始菜单-Python-IDLE (Python 3.x xx-bit),就可以打开编程工具。

关于Python的基础语法,各位可以参考下这个网站。
https://www.runoob.com/python3/python3-tutorial.html
Python编程练手:批量下载赛尔号精灵图片与头像
这是我写的第一篇Python编程练手文章,因此就先选一个比较简单的程序来练手。
相信有些玩家喜欢收集精灵图片与精灵头像,本文就讲解一下如何使用Python批量下载赛尔号精灵图片与头像。
首先,我们需要知道两个网址。
赛尔号精灵图片网址 >>
http://seerh5.61.com/resource/assets/fightResource/pet/精灵序号.png

赛尔号精灵头像网址 >>
http://seerh5.61.com/resource/assets/pet/head/精灵序号.png

接着,下载文件需要一个函数库,在开始编程之前,先安装这个函数库。
按下Win+R键,输入“cmd”,打开“命令提示符”,输入“pip install requests”,按下回车键,等待命令执行完成。

最后,做好准备工作,开始编写代码。
打开Python-IDLE,点击菜单栏-File-New File,新建一个文件。

之后,我们将在这个窗口中,编写代码。

函数库是一个非常好用的东西,它将函数封装入库,把一些常用到的函数编完放到一个文件里,供不同的人进行调用。有了函数库,我们就可以直接使用别人写好的内容,去实现自己想要的功能,而不需要从头开始自己去写,大大地提高了开发效率。
举个类似的例子,我想给朋友打个电话,我只需要打开手机中的“电话”APP,然后拨号进行通话就可以了,而不需要我自己从头开始去造一个电话,然后再去拨号。
我们的目的是为了下载文件,下载文件就需要用到requests函数库,因此我们需要先将这个函数库导入进来。
输入以下代码,导入requests函数库。
导入函数库后,我们尝试下载谱尼的精灵头像。
定义一个变量url,用于存放谱尼(序号5000)精灵头像的网址。
(谱尼精灵头像的网址为“http://seerh5.61.com/resource/assets/pet/head/5000.png”)。
定义一个变量r,用来请求获得这个网址的数据信息。
之后使用write函数,将这个数据保存成文件。
(在保存之前,一定要先在D盘下创建一个名为“petHead”的文件夹)。

值得注意的是,文件路径一定要写“\\”(双反斜杠),或者是写“/”(单斜杠),因为“\”(单反斜杠)代表的是转义符。直接在文本前添加r也可以取消转义。
以下三种写法都是行得通的。
将以上步骤的单句代码整合一下,就是下面这种效果。
(图中带有#的行不需要输入,这部分是注释,方便开发人员阅读代码思路,不会影响程序运行结果。)

然后,我们保存这个代码文件。

点击菜单栏-Run-Run Module,运行这个文件。

这样,谱尼的头像图片就会下载到对应的文件夹内了。

好的,学会了如何下载单个文件,接下来就开始尝试批量下载多个文件。
批量下载,自然离不开循环结构,添加一个for循环,将下载文件的函数放进去。
range(1,5001)指的是从1~5000的整数,range函数创建的集合,包含左侧,不包含右侧。
由于变量i是int类型(整数型),因此需要使用str()函数将其转换为string型(字符串/文本型)。
把代码整合一下,就是下图的样子。

运行这段代码,就可以批量下载精灵头像的图片了。

这样,最基本的批量下载精灵图片的功能就做好了。
当然,我们都想要精益求精,这段代码或许还有一些地方需要进行优化。
刚刚,需要我们手动创建文件夹,才能把文件下载到指定的文件夹内,或许,我们可以使用代码自动创建文件夹。
首先,导入os库。
如果目标文件夹不存在,那么就创建目标文件夹。
把这一段代码添加进去,整合后的代码就是这样的。

有时候,我们会发现,某些序号的精灵不存在,比如1001号,因此,我们需要判断一下精灵图片文件是否存在,如果存在,再下载。

定义一个变量status,用来获得这个网址数据的状态。
判断这个网址是否正常,如果该网址不存在对应的文件,这个status就会返回404。

如果这个文件不存在,那么就跳过这个文件,不下载,快进到下个文件的循环。
将这个判断加到适当的位置,就可以避免下载空文件。

最后,我们把精灵图片的网址也加进去,并添加下载进度输出的函数。
整合结果如下图所示。

这样,就可以一边批量下载图片,一边输出下载结果。

当然,各位也可以调整一下代码结构,只使用一个循环完成任务,这样效率会更高一些。
只不过需要继续嵌套if,而python对于空格缩进的要求非常严格,因此各位再嵌套的时候,一定要计算好空格的数量。

最后,为了减轻服务器的压力,大家一定要为for循环加一个延时代码。
不加延时的话,短时间高频访问某个网站,那么这个网站可能会把你的IP拉黑,你就暂时无法访问这个网站了。
导入time函数库。
添加延时0.5秒的函数。
把延时函数放到for循环之中。
这样,使用Python批量下载赛尔号精灵图片与头像的小程序就制作完成了。

如果喜欢本文,欢迎点赞、评论、转发,听说关注我的人都变帅了。
留个练手的小作业,感兴趣的小伙伴可以尝试写一个批量下载刻印图片的小程序。
精灵刻印的网址 >>
http://seerh5.61.com/resource/assets/countermark/icon/刻印序号.png

刻印序号从10001开始,10001~10396(能力刻印),然后是20001~20692(技能刻印),然后就是从40001开始了(全能刻印),最新的刻印序号在42100左右。
程序源代码
# 导入函数库
import requests
import os
import time
# 创建目录
if not os.path.exists('D:\\petHead'):
os.mkdir('D:\\petHead')
if not os.path.exists('D:\\pet'):
os.mkdir('D:\\pet')
for i in range(1,5001):
# 延时
time.sleep(0.5)
# 定义网址
url = 'http://seerh5.61.com/resource/assets/pet/head/' + str(i) + '.png'
r = requests.get(url)
# 判断文件状态
status = r.status_code
if status != 404:
# 下载头像文件
with open("D:\\petHead\\"+ str(i) + '.png', "wb") as file:
file.write(r.content)
# 输出下载结果
print ('已下载头像图片:' + str(i))
# 定义网址
url = 'http://seerh5.61.com/resource/assets/fightResource/pet/' + str(i) + '.png'
r = requests.get(url)
# 判断文件状态
status = r.status_code
if status != 404:
# 下载精灵文件
with open("D:\\pet\\"+ str(i) + '.png', "wb") as file:
file.write(r.content)
# 输出下载结果
print ('已下载精灵图片:' + str(i))