当前位置: 首页 > 网络应用技术

python爬行动物实际战斗|使用多线程到爬行大声笑 - 定义壁纸

时间:2023-03-08 14:19:16 网络应用技术

  随着移动终端的普及,已经出现了许多移动应用程序,并且应用程序软件已经流行。我已经看到了《英雄联盟》的手机游戏。感觉还可以。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