作者| 王维军
编辑| 埃勒
制作| CSDN 博客
介绍
每个人都玩过《王者荣耀》,即使您没有,您也可能听说过它是当今最受欢迎的MOBA 手机游戏。我们今天的重点是爬取《王者荣耀》中所有英雄的所有皮肤,只需要20行Python代码就可以完成。
准备
爬行皮肤本身并不困难。困难的部分是首先获取皮肤图像的URL 地址。立即访问王者荣耀官方网站。
点击英雄信息,随机选择一个英雄,F12打开调试控制台,找到该英雄原皮肤的图片地址。
然后,当你切换英雄的皮肤时,你会注意到虽然图像地址没有明显的变化,但最后的数字序列号发生了变化。我们把两张皮肤图片的地址放在一起对比一下。
http://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/523/523-bigskin-1.jpghttp://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/523/523-bigskin- 2.jpg 可以猜测,同一个英雄的皮肤图片地址只是最后一个数字不同。为了证实你的猜测,继续搜索英雄的完整皮肤图片,并搜索更多皮肤的英雄。我们这里要找的是孙善祥。我会把他所有皮肤照片的地址放在一起对比一下。
http://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/111/111-bigskin-1.jpghttp://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/111/111-bigskin- 2.jpghttp://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/111/111-bigskin-3.jpghttp://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/111/111- bigskin-4.jpghttp://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/111/111-bigskin-5.jpghttp://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/111/111-bigskin-6.jpghttp://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/111/111-bigskin-7.jpg 由此我们可以得出结论,同一英雄的皮肤图像路径开始。马苏。从1开始,我们就来看看各个英雄是如何区分的。可以看到,无论皮肤图片如何变化,浏览器顶部显示的地址始终保持不变。那么我们来比较一下两个不同英雄的URL地址。
https://pvp.qq.com/web202305/herodetail/523.shtmlhttps://pvp.qq.com/web202305/herodetail/111.shtml 乍一看,似乎没有任何规律,但这里必须发现一件事。最后一个数字实际上控制的是哪个英雄?我暂时认为是英雄的数字,但不幸的是英雄的数字之间似乎没有任何规律。请不要担心。访问官方网站并寻找线索。
在英雄信息界面,我打开F12调试控制台并收到网络请求,并找到了几个文件。
如果您单击“网络”,然后单击“XHR”,您将看到这些文件存储英雄列表信息。
是的,英雄信息包括英雄姓名、英雄编号等信息都会存储在这里。比如小乔的名字是英雄号106,那么按照之前的想法,会保存详细的信息。英雄小乔的地址是:https://pvp.qq.com/web202305/herodetail/106.shtml
当我尝试之后,我发现确实如此。
至此,准备工作就完成了。事实上,此时整个项目已经完成了一半。下一步是实现代码。
代码
首先,创建一个Python 文件,然后导入OS 和Requests 模块。
您必须先按照前面的步骤获取英雄列表信息。这是herolist.json 文件。文件地址为https://pvp.qq.com/web202305/js/herolist.json,可以在debug中找到。车站。
接下来我们需要先通过这个地址获取英雄列表信息json数据,然后解析该json数据,提取有用的信息。
url=\’https://pvp.qq.com/web202305/js/herolist.json\’herolist=requests.get(url) # 获取英雄列表json文件herolist_json=Herolist.json # 转换为json格式hero_name=list(map(lambda x: x [\’cname\’], Herolist.json)) # 提取英雄的名字Hero_number=list(map(lambda x: x[\’ename\’], Herolist.json)) # 获取英雄的名字,可以测试它通过打印number 来提取英雄的编号。
一旦你有了你的英雄号码,你的工作就变得非常简单,只需结合你的URL 地址即可。
http://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/\’ + Hero_number + \’/\’ + Hero_number + \’-bigskin-1.jpg,可以获取所有英雄皮肤照片,但是这里有一个问题。有些英雄只有2 个皮肤,有些只有6 或7 个皮肤,所以我在这里采用了一个相对愚蠢的方法。即,通过将变量从1 连续增加到10 来连接图像地址。如果发现不可用的图像,则不会对其进行处理。这是因为没有英雄拥有超过10个皮肤,所以你可以获得所有图像。我们看一下代码实现。
# 下载照片def downloadPic:i=0for j in Hero_number:# 创建文件夹os.mkdir(\\\’C:\\\\Users\\\\Administrator\\\\Desktop\\\\wzry\\\\\\\’ + Hero_name[i])# 创建文件夹Enter os. chdir(\\\’C:\\\\Users\\\\Administrator\\\\Desktop\\\\wzry\\\\\\\’ + Hero_name[i])i +=1for k in range(10):# 拼接urlonehero_link=\’http://game.gtimg.cn /images /yxzj/img202306/skin/hero-info/\’ + str(j) + \’/\’ + str(j) + \’-bigskin-\’ + str(k) + \’.jpg\’im=requests.get( onehero_link) # 请求urlif im.status_code==200:open(str(k) + \’.jpg\’, \’wb\’).write(im.content) # 写入文件非常简单,代码注释很清楚。使用该函数,只需调用一次即可下载图片。整个程序的完整代码为:
import osimport requesturl=\’https://pvp.qq.com/web202305/js/herolist.json\’herolist=request.get(url) # 获取英雄列表json文件herolist_json=Herolist.json # 转换为json格式hero_name=list(map ( lambda x: x[\’cname\’], Herolist.json)) # 提取英雄的名字Hero_number=list(map(lambda x: x[\’ename\’], Herolist.json)) # 提取英雄的编号# 下载图片def downloadPic:i=0for j in Hero_number:# 创建文件夹os.mkdir(\\\’C:\\\\Users\\\\Administrator\\\\Desktop\\\\wzry\\\\\\\’ + Hero_name[i])# 进入你创建的文件夹os.chdir(\\\’C: \\\\Users\\\\Administrator\\\\Desktop\\\\wzry\\\\\\\’ + Hero_name[i])i +=1for k in range(10):# 拼接urlonehero_link=\’http://game.gtimg.cn/images/yxzj/img202306/Skin/hero-info/\’ + str(j) + \’/\’ + str(j) + \’-bigskin-\’ + str(k) + \’.jpg \’im=request.get(onehero_link) # 请求urlif im. status_code==200:open(str(k) + \’.jpg\’, \’wb\’).write(im.content) # 写入文件downloadPic 并删除注释。我用大约20 行代码完成了整个爬行。王者荣耀英雄皮肤不是很容易获得吗?要测试该程序,首先您需要在桌面上创建一个名为wzry 的文件夹。如果您想更改此设置,也可以在创建文件夹后执行此操作。运行并等待一段时间,所有照片将被下载。
您还可以使用Jsonpath 模块来解析程序中的Json 字符串。使用该模块,解析方法如下:
Hero_name=jsonpath.jsonpath(html_json, \\\’$.cname\\\’) Hero_number=jsonpath.jsonpath(html_json, \\\’$.ename\\\’) 此方法接受Json 字符串和解析规则。 $.cname 在根目录中的任意位置使用cname 作为键搜索值并将其添加到字典中。
结尾
爬虫非常直观,具有视觉冲击力,并且编写起来非常有价值。爬虫很强大,但它们不应该随意爬取您的个人信息。
原文:https://blog.csdn.net/qq_42453117/article/details/103190981
2023年底,《原力计划》升级版来了!即日起,只要您的文章符合要求,即可加入原力项目,获得流量+现金支持。
参与方式:发表原创文章时,只需在投稿页面勾选原力项目即可参与。详情请阅读二维码并戳戳【已完】Python系列学习成长课程点这里! 15年经验专家及CSDN特约导师直接指导。您还期待什么?扫描二维码立即注册并了解:
本文和图片来自网络,不代表火豚游戏立场,如若侵权请联系我们删除:https://www.huotun.com/game/645648.html