Python下载王者荣耀皮肤及个数可视化

模块包

requests
bs4
urllib
pyecharts

效果图

image.png

image.png

image.png

数据获取

1) 打开王者荣耀官网网站(https://pvp.qq.com/),最顶部-游戏资料-英雄资料。

2) 谷歌浏览器,F12查看页面数据。不难发现,获取英雄列表数据接口。得到的是个json数据格式文件。

图片

3)快速查看json框架接口

可以参考(https://www.jianshu.com/p/219b5755bafc)

图片

如上图所示,很快得到清晰的英雄数据。

4) 英雄皮肤

选择其中一个英雄并点击英雄头像跳转至详情界面,F12查看皮肤数据。以云中君为例。

皮肤个数:

图片

皮肤地址:

图片

代码实现

  • 抓取网站英雄数据
def get_hero(self):
    request = requests.get(self.hero_url)
    hero_list = request.json()
    return hero_list
  • 解析英雄列表和皮肤数据
def hero_skin(self, hero_list):
    num = 0
    for hero in hero_list:
        num += 1
        hero_no = str(hero['ename'])
        self.detail_url = hero_no + '.shtml'
        hero_name = hero['cname']
self.get_hero_skin(str(num) + hero_name, hero_no)

def get_skin_html(self):
    url = parse.urljoin(self.base_url, self.detail_url)
    request = requests.get(url)
    request.encoding = 'gbk'
    html = request.text
    soup = BeautifulSoup(html, 'lxml')
    skip_list = soup.select('.pic-pf-list3')
    return skip_list

def get_hero_skin(self, hero_name, hero_no):
    skip_list = self.get_skin_html()
    for skin_info in skip_list:
        img_names = skin_info.attrs['data-imgname']
        name_list = img_names.split('|')
        skin_no = 1
        for skin_name in name_list:
            self.skin_detail_url = '%s/%s-bigskin-%s.jpg' % (hero_no, hero_no, skin_no)
            skin_no += 1
            img_name = hero_name + '-' + skin_name.split('&')[0] + str(skin_no-1) + '.jpg'
            self.download_skin(img_name)

由于篇幅原因,这里只展示部分代码。

皮肤下载,可视化

  • 下载
def download_skin(self, img_name):
    img_url = parse.urljoin(self.skin_url, self.skin_detail_url)
    # 防止http请求太快,导致异常
    time.sleep(0.5)
    request = requests.get(img_url)
    if request.status_code == 200:
        print('download-%s' % img_name)
        img_path = os.path.join(self.img_folder, img_name)
        with open(img_path, 'wb') as img:
            img.write(request.content)
    else:
        print('img error!')
  • 可视化
def m_cloud(self):
    cloud = (
        WordCloud(init_opts=opts.InitOpts(theme='essos'))
        .add("英雄皮肤个数", self.json_data)
        .set_global_opts(title_opts=opts.TitleOpts(title="英雄皮肤个数分布"))
    )
    cloud.render("王者荣耀英雄皮肤个数.html")

def m_pie(self):
    p = (
        Pie(init_opts=opts.InitOpts(theme='essos'))
        .add("英雄定位个数", self.json_data)
        .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
        .set_global_opts(title_opts=opts.TitleOpts(title="英雄定位个数分布"))
    )
    p.render("英雄定位个数分布.html")

更多详情,请见原文

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容