爬虫 | Python送你王者荣耀官网全套皮肤

文章目录

    • 1. 网页分析
    • 2. 数据获取
      • 2.1 英雄请求
      • 2.2 数据解析
    • 3. 数据保存

大家好,我是欧K。

王者荣耀这款手游,想必大家都玩过或听过,虽已运营六年,但热度依然不减当年,各种英雄配上各式各样的皮肤,甚是精美,今天就教大家如何利用几行Python代码轻松爬取王者荣耀官网全套皮肤~~文末有已经下载好的全套皮肤获取方式,喜欢的可以收下哦

1. 网页分析

首先打开王者荣耀官网,点击英雄资料:
爬虫 | Python送你王者荣耀官网全套皮肤_第1张图片
F12查看网页源码,可以看到所有英雄都在一个无序列表中,比如第一个司空震,在第一个

  • 中,依次类推,点击列表中的.shtml链接即可进入到对应英雄的详情页,我们的皮肤就在详情页中:
    爬虫 | Python送你王者荣耀官网全套皮肤_第2张图片
    任意选择一个英雄,这里我们选择孙悟空,进入到详情页中,F12查看网页源码,点击每个皮肤(这里点击前4个),我们可以看到在Network中出现了“167-bigskin-5.jpg”、“167-bigskin-6.jpg”、“167-bigskin-7.jpg”、“167-bigskin-8.jpg”四个图片文件:
    爬虫 | Python送你王者荣耀官网全套皮肤_第3张图片
    分析得出167是.shtml链接的英雄编号,5/6/7/8依次对应前四个皮肤:
    爬虫 | Python送你王者荣耀官网全套皮肤_第4张图片
    这样就完了吗?
  • 坑已备好,You jump? I jump!!!

    这里有没有注意到一个问题,要获取最终的英雄皮肤,需要知道两个关键参数英雄编号和皮肤编号,英雄编号在首页可以获取,但是每个英雄具体有几个皮肤我们并不知道

    带着这个疑问,我们往下走…

    2. 数据获取

    2.1 英雄请求

    分析请求链接:
    http://pvp.qq.com/web201605/js/herolist.json
    爬虫 | Python送你王者荣耀官网全套皮肤_第5张图片
    细心的朋友会注意到网页返回数据中cname/skin_name/title是乱码,初步怀疑有可能是网页编码格式的问题,我们看一下返回的网页编码:

    果然没错,Response Headers中的content-encoding编码是gzip,我们构造请求在pycharm中运行看一下,代码如下:

    # 导入模块
    import requests
    
    # 获取网页数据
    url = 'http://pvp.qq.com/web201605/js/herolist.json'
    # 添加请求头
    headers = {
           'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 QIHU 360SE'} 
    # 发送网页请求
    r = requests.get(url, headers=headers)
    hero_list = r.json()
    print(hero_list)
    

    请求返回编码“utf-8”,我们直接打印出返回信息:
    爬虫 | Python送你王者荣耀官网全套皮肤_第6张图片
    返回信息还有意外收获,ename(英雄编号)、skin_name(皮肤名称),有了皮肤名称不就相当于有了皮肤编号吗,香不香!!!

    2.2 数据解析

    主要获取ename/skin_name:

    for hero in range(len(hero_list)):
        try:
            # 英雄编号
            hero_num = hero_list[hero]['ename']
            # 英雄名称
            hero_name = hero_list[hero]['cname']
            # 皮肤列表
            skin_name = hero_list[hero]['skin_name'].split('|')
            # 统计皮肤数量
            skin_count = len(skin_name)
            print('英雄名称:',hero_name,' 皮肤数量:',skin_count)
        except:
            print('获取英雄信息异常!')
            continue
    

    遍历皮肤链接,请求皮肤:

    # 遍历每一个英雄获取皮肤图片
    for i in range(1, skin_count + 1):
        try:
            # 皮肤网址
            url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{}/{}-bigskin-{}.jpg'.format(hero_num,hero_num,i)
            # 获取图片信息
            picture = requests.get(url).content
        except:
            print('获取皮肤异常!')
    continue
    

    3. 数据保存

    在代码路径下新建pictures文件夹:

    with open('pictures/{}-{}.jpg'.format(hero_name,skin_name[i - 1]), 'wb') as f:
        f.write(picture)
    

    结果如下:
    爬虫 | Python送你王者荣耀官网全套皮肤_第7张图片
    如果需要本文资源(代码+皮肤),请在公众号后台回复“王者荣耀”。

    以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、收藏也可以分享到朋友圈让更多人知道

    推荐阅读

    技巧 | Python 字典用法详解(超全)
    技巧 | Python 列表经典使用技巧
    技巧 | 20个Pycharm最实用最高效的快捷键(动态展示)
    可视化 | 动起来的中国大学排名,看看你的母校在哪里
    可视化 | Python时间序列化NBA球星赛季数据
    可视化 | Python制作最炫3D可视化地图

    微信公众号 “Python当打之年” ,每天都有python编程技巧推送,希望大家可以喜欢
    在这里插入图片描述

你可能感兴趣的:(Python爬虫)