介绍
每个人都玩过《王者荣耀》,即使您没有,您也可能听说过它是当今最受欢迎的MOBA 手机游戏。我们今天的重点是爬取《王者荣耀》中所有英雄的所有皮肤,只需要20行Python代码就可以完成。
准备
爬行皮肤本身并不困难。困难的部分是首先获取皮肤图像的URL 地址。立即访问王者荣耀官方网站。
点击英雄信息,随机选择一个英雄,F12打开调试控制台,找到该英雄原皮肤的图片地址。
然后,当你切换英雄的皮肤时,你会注意到虽然图像地址没有明显的变化,但最后的数字序列号发生了变化。我们把两张皮肤图片的地址放在一起对比一下。
http://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/523/523-bigskin-1.jpg
http://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.jpg
http://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/111/111-bigskin-3.jpg
http://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/111/111-bigskin-4.jpg
http://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/111/111-bigskin-5.jpg
http://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/111/111-bigskin-6.jpg
http://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模块和request模块。
您必须先按照前面的步骤获取英雄列表信息。这是herolist.json 文件。文件地址为https://pvp.qq.com/web202305/js/herolist.json,可以在debug中找到。车站。
接下来需要先通过这个地址获取英雄列表信息json数据,然后解析该json数据,提取有用信息:url=\’https://pvp.qq.com/web202305/js/herolist.json\’
Herolist=request.get(url) # 获取英雄列表json文件
Heroist_json=Heroist.json() # 转换为json格式
Hero_name=list(map(lambda x: x[\’cname\’], Herolist.json())) # 提取英雄名字
Hero_number=list(map(lambda x: x[\’ename\’], Herolist.json())) # 提取英雄编号。这样你就可以得到英雄的名字和号码并打印出来进行测试。一旦你有了你的英雄号码,你的工作就会非常简单,只需结合你的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():
我=0
对于Hero_number: 的j
#创建文件夹
os.mkdir(\’C:\\\\Users\\\\Administrator\\\\Desktop\\\\wzry\\\\\’ + Hero_name[i])
# 进入创建的文件夹
os.chdir(\’C:\\\\Users\\\\Administrator\\\\Desktop\\\\wzry\\\\\’ + Hero_name[i])
我+=1
对于k 在(10): 范围内
# 拼接网址
onehero_link=\’http://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/\’ + str(j) + \’/\’ + str(
j) + \’-bigskin-\’ + str(k) + \’.jpg\’
im=requests.get(onehero_link) #请求网址
如果im.status_code==200:
open(str(k) + \’.jpg\’, \’wb\’).write(im.content) #写入文件
实现起来非常简单,代码注释也非常清楚,所以这里是整个程序的完整代码:
导入操作系统
导入请求
URL=\’https://pvp.qq.com/web202305/js/herolist.json\’
Herolist=request.get(url) # 获取英雄列表json文件
Heroist_json=Heroist.json() # 转换为json格式
Hero_name=list(map(lambda x: x[\’cname\’], Herolist.json())) # 提取英雄名字
Hero_number=list(map(lambda x: x[\’ename\’], Herolist.json())) # 提取英雄编号
# 下载图片
def downloadPic():
我=0
对于Hero_number: 的j
#创建文件夹
os.mkdir(\’C:\\\\Users\\\\Administrator\\\\Desktop\\\\wzry\\\\\’ + Hero_name[i])
# 进入创建的文件夹
os.chdir(\’C:\\\\Users\\\\Administrator\\\\Desktop\\\\wzry\\\\\’ + Hero_name[i])
我+=1
对于k 在(10): 范围内
# 拼接网址
onehero_link=\’http://game.gtimg.cn/images/yxzj/img202306/skin/hero-info/\’ + str(j) + \’/\’ + str(
j) + \’-bigskin-\’ + str(k) + \’.jpg\’
im=requests.get(onehero_link) #请求网址
如果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://www.huotun.com/game/645651.html