随着移动终端的普及,已经出现了许多移动应用程序,并且应用程序软件已经流行。我已经看到了《英雄联盟》的手机游戏。感觉还可以。PC英雄联盟可以描述为爆炸性游戏。我不知道移动航站楼的英雄联盟的未来是什么。今天,我们使用多线程方法来爬行LOL官方网站英雄HDWALLPAPER。
目标网站:https://lol.qq.com/data/info-heros.shtml#navi
官方网站界面如图所示。显然,一张小照片显示了英雄。我们的目的是抓住每个英雄的所有皮肤图片,全部下载并在本地保存。
次要页
上面的页面我们称为主页,第二页是与每个英雄相对应的页面。以黑暗为例。其次要页面如下所示:
我们可以看到很多小图片。每张小图片对应于皮肤。通过网络查看皮肤数据接口。如下图所示:
我们知道,皮肤信息是由JSON格式字符串传输的,因此,只要我们找到每个英雄的相应ID,找到相应的JSON文件,并提取所需的数据以获取高定义的皮肤壁纸。
然后,黑暗女儿的json的文件地址是:
这里的规则实际上很简单。每个英雄的皮肤数据的地址都是这样:
那么ID的法律是什么?需要在主页上查看英雄的ID,如下所示:
我们可以看到两个列表[0,99],[100,156],即156个英雄,但是heroid已达到240…..因此,要爬全英雄皮肤图片,您需要先获得所有骨s的镜头。
为什么要使用多线程,这是一个解释,当我们抓取图片和视频时,因为您需要将其保存到局部区域,因此您将使用大量文件来读写操作,也就是说,IO操作。我们执行同步请求操作;
然后,直到保留文件之前,第二个请求才能完成,因此该效率非常低。如果将多线程操作用于异步操作,则该效率将大大提高。
因此,有必要使用多线程或多进程,然后将如此多的数据队列扔到线程池或进程池;
在Python中,多处理池进程池,多处理。假人非常易于使用。
两个模块和模块的API都是常见的,并且代码的切换更加灵活。
我们首先在测试demo.py文件中捕获英雄ID。我在这里编写了代码,获取了存储英雄列表,然后直接在主文件中使用。
演示
怠速如下所示:
idlist = [1,2,3,....,875,876,877]#中间的英雄ID在此处不显示显示
构造的URL:page ='http://www.bizhi888888.com/s/470/ {} .html'.format(i)
我在这里代表ID和URL的动态结构;
然后,我们自定义两个功能来爬网和分析页面(蜘蛛),一个用于下载数据(下载),打开一个线程池,用于构建循环的URL来存储英雄skin json data.questing.questing,请使用pool.map()执行蜘蛛(crawler)功能的方法;
角色:将列表中的每个元素作为函数的参数提取,创建一个过程,然后将其放入过程池中;
参数1:要执行的函数;
参数2:示威者,迭代设备中的数字依次传输到函数中;
JSON数据分析
在这里,我们使用女儿黑暗女儿的JSON文件显示显示。我们需要获得的内容是1.名称,2.Skin_name,3.Mainimg,因为我们发现Heroname是相同的,因此我们将英雄名称用作Herothe Skin Folder名称,因此很容易查看并保存;
有一个注意:
一些mainimg标签是空的,因此我们需要跳过,否则如果是一个空链接,请在请求时报告错误;
导入相关的第三方库
页面数据分析
下载图片下载
在这里,我们使用OS模块创建一个文件夹。我们前面提到,每个英雄的世代名称的价值是相同的,因此要创建一个文件夹并命名,它很方便皮肤保存(分类),然后是图片文件的路径,这里是图片的路径在这里文件。如果您需要小心,则如果您有倾斜的情况,您将报告一个错误。
main()主函数
阐明:
结果如下:
当然,这只是对某些图像的拦截,总共有200多个图片被爬了。一般来说,这仍然是可能的。
这次,我们使用了多线程攀登英雄联盟官方网站英雄皮肤高定义壁纸。由于图片涉及IO操作,因此我们使用并发方法,从而大大提高了程序的执行效率。
当然,爬行者试图停止。这次是经过小测试的剑,爬上了20位英雄的皮肤图片。有兴趣的朋友可以爬下所有的皮肤,只需要将遍历元素更改为以前的惰轮即可。
本文结束了。
资料来源:公共号码[Jie GE的IT之旅]
作者:阿拉斯加
id:jake_internet