Python爬虫实战之王者荣耀全套皮肤采集~

导语:

哈喽吖!铁汁们。王者荣耀这款手游,想必大家都玩过或听过,虽已运营7年,但热度依然不减当年,各种英雄配上各式各样的皮肤,甚是精美,

 

今天就教大家如何利用几行Python代码爬取王者荣耀全套皮肤~~

01网页分析

首先打开王者荣耀官网,点击英雄资料:

Python爬虫实战之王者荣耀全套皮肤采集~_第1张图片

Python爬虫实战之王者荣耀全套皮肤采集~_第2张图片

F12查看网页源码,可以看到所有英雄都在一个无序列表(

    )中,比如第一个司空震,在第一个
  • 中,依次类推,点击列表中的.shtml链接即可进入到对应英雄的详情页,我们的皮肤就在详情页中:

    Python爬虫实战之王者荣耀全套皮肤采集~_第3张图片

    任意选择一个英雄,这里我们选择孙悟空,进入到详情页中,F12查看网页源码,点击每个皮肤(这里点击前4个),我们可以看到在Network中出现了“167-bigskin-5.jpg”、“167-bigskin-6.jpg”、“167-bigskin-7.jpg”、“167-bigskin-8.jpg”四个图片文件:

    Python爬虫实战之王者荣耀全套皮肤采集~_第4张图片

    分析得出167是.shtml链接的英雄编号,5/6/7/8依次对应前四个皮肤:

    Python爬虫实战之王者荣耀全套皮肤采集~_第5张图片

    这样就完了吗?

    坑已备好,You jump? I jump!!!

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

    图片

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

    02数据获取

    英雄请求,分析请求链接:

    http://pvp.qq.com/web201605/js/herolist.json

    Python爬虫实战之王者荣耀全套皮肤采集~_第6张图片

    细心的朋友会注意到网页返回数据中cname/skin_name/title是乱码,初步怀疑有可能是网页编码格式的问题,我们看一下返回的网页编码:

    Python爬虫实战之王者荣耀全套皮肤采集~_第7张图片

    果然没错,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爬虫实战之王者荣耀全套皮肤采集~_第8张图片

     返回信息还有意外收获,ename(英雄编号)skin_name(皮肤名称),有了皮肤名称不就相当于有了皮肤编号吗,香不香!!!

    数据解析,主要获取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

    03数据保存

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

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

    结果如下:

    Python爬虫实战之王者荣耀全套皮肤采集~_第9张图片

    end

    以上就是本期为大家整理的全部内容了,喜欢的朋友可赶快练习起来吧!记得给小编三连噢!

    想要领取完整源码跟Python学习资料可点击这行字体

     

你可能感兴趣的:(Python,程序员,python,爬虫,开发语言)