自从发现了该海报,我沦陷了😍😍,白鹤梁神女YYDS

王者荣耀角色扮演游戏Java代码 安卓王者代码_python

直接给pycharm换上

王者荣耀角色扮演游戏Java代码 安卓王者代码_王者荣耀角色扮演游戏Java代码_02

直呼完美

实现过程

目录

目录

一、爬取王者荣耀图片

1.之前代码展示

2.修改后代码讲解

3.源代码展示

4.结果展示

二、将好看的皮肤设置为pycharm背景


 

一、爬取王者荣耀图片

1.之前代码展示

import os
import requests
url = 'https://pvp.qq.com/web201605/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()))  # 提取英雄的编号
yx_urls = 'https://pvp.qq.com/web201605/herodetail/{}.shtml'

# 下载图片
def downloadPic():
    i = 0
    for j in hero_number:
        yx_url = 'https://pvp.qq.com/web201605/herodetail/{}.shtml'.format(str(j))
        r = requests.get(yx_url)
        # 创建文件夹
        try:
            os.mkdir(r'E:\Python社区版\1\\' + hero_name[i])
        except:
            pass
        # 进入创建好的文件夹
        os.chdir(r'E:\Python社区版\1\\' + hero_name[i])
        i += 1
        for k in range(10):
            # 拼接url
            onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(j) + '-bigskin-' + str(k) + '.jpg'
            im = requests.get(onehero_link)  # 请求url
            # 到后面没有皮肤时,随着k的增大,onehero_link所构成的网址为无效
            # 例如http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/195/195-bigskin-8.jpg为无效网址
            if im.status_code == 200:
                f = open(str(k) + '.jpg', 'wb')
                f.write(im.content)  # 写入文件
                f.close()
        w = len(hero_name)-j+1
        print(i)
        print(hero_name[w] + '的皮肤下载成功!!')

downloadPic()

王者荣耀角色扮演游戏Java代码 安卓王者代码_Python_03

以上代码能爬取王者荣耀的高清图片

缺点:图片的命名为数字而不是皮肤名字

因此需要将代码进行修改,实现图片名字与英雄名字一一对应 

2.修改后代码讲解

王者荣耀角色扮演游戏Java代码 安卓王者代码_python_04

url = 'https://pvp.qq.com/web201605/js/herolist.json'
herolist = requests.get(url)  # 获取英雄列表json文件
print(herolist.text)

①首先,我们可以发现王者荣耀英雄数据是存在herolist.json中,所以我们需要通过requests获取相关数据


print(herolist.text)


部分结果如下图

王者荣耀角色扮演游戏Java代码 安卓王者代码_Python_05

②接下来我们需要将获取的数据转换为json格式,方便提取其中的数据。

herolist_json = herolist.json()  # 转化为json格式
# print(herolist_json)
hero_name = list(map(lambda x: x['cname'], herolist.json()))  # 提取英雄的名字
# print(hero_name)
hero_number = list(map(lambda x: x['ename'], herolist.json()))  # 提取英雄的编号


hero_name = list(map(lambda x: x['cname'], herolist.json())) # 提取英雄的名字


hero_number = list(map(lambda x: x['ename'], herolist.json())) # 提取英雄的编号


 这两行代码表示提取json文件中英雄的名字和编号,并以列表方式存储,方便接下来的遍历。


③小插曲 

# skin_names = re.compile('"skin_name": "(.*?)"', re.S)
# sss = skin_names.findall(herolist.text)
# print(sss)
# ['正义爆轰|地狱岩魂', '恋之微风|万圣前夜|天鹅之梦|纯白花嫁|缤纷独角兽', '苍天翔龙|忍●炎影|未来纪元|皇家上将|嘻哈天王|白执事|引擎之心', '和平守望|金属风暴|龙骑士|进击墨子号', '魅

这是笔者在写代码时候第一次想的方案,也是提取英雄的皮肤名称,结果如下,是个列表。


['正义爆轰|地狱岩魂', '恋之微风|万圣前夜|天鹅之梦|纯白花嫁|缤纷独角兽', '苍天翔龙|忍●炎影|未来纪元|皇家上将|嘻哈天王|白执事|引擎之心', '和平守望|金属风暴|龙骑士|进击墨子号', '魅


但是后来发现即使你获得了这个列表,将它与图片一一对应还是有些困难,因为它遍历该列表,并且还要进一步获取皮肤名称,并且还有|符号混在皮肤名称中间。

简单来说;首先要从整个列表中遍历 正义爆轰|地狱岩魂,然后又要获取其中的正义爆轰地狱岩魂,其中有|符号作为干扰项,即使成功获取,接下来还要和皮肤图片一一对应,也有点麻烦。

因此我找了其他方法


# 下载图片
def downloadPic():
    i = 0
    for j in hero_number:
        yx_url = 'https://pvp.qq.com/web201605/herodetail/{}.shtml'.format(str(j))
        r = requests.get(yx_url)
        # 创建文件夹
        try:
            os.mkdir(r'E:\Python社区版\王者荣耀皮肤图片\\' + hero_name[i])
        except:
            pass
        # 进入创建好的文件夹
        os.chdir(r'E:\Python社区版\王者荣耀皮肤图片\\' + hero_name[i])
        i += 1
        # #经过一系列转化,将皮肤转成列表格式方便遍历
        pifu = re.compile('<ul class="pic-pf-list pic-pf-list3" data-imgname="(.*?)">', re.S)
        ssss = pifu.findall(r.content.decode("gbk"))[0]
        aaaa = ssss.replace("|", "")
        # print(aaaa)
        bbbb = re.sub(r'&\d*', '", "', aaaa)
        cccc = '["{}"]'.format(bbbb)
        # 将字符串转化为列表
        dddd = eval(cccc)
        # 删除列表最后的""
        del dddd[-1]
        # print(dddd)

        for k, l in enumerate(dddd):
            # print(k+1, l)
            # 拼接url
            onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(j) + '-bigskin-' + str(k+1) + '.jpg'
            im = requests.get(onehero_link)  # 请求url
            if im.status_code == 200:
                f = open(str(l) + '.jpg', 'wb')
                print('{}正在下载{}皮肤😁😁'.format(i, l))
                f.write(im.content)  # 写入文件
                f.close()

接下来自定义一个函数,在自定义函数中,因为英雄皮肤存在个个英雄的网页中,所以要先构建英雄url,遍历之前获得的hero_number列表构建英雄url。


try: os.mkdir(r'E:\Python社区版\王者荣耀皮肤图片\\' + hero_name[i]) except: pass


根据英雄名字创建文件夹,结果如下

王者荣耀角色扮演游戏Java代码 安卓王者代码_json_06


os.chdir(r'E:\Python社区版\王者荣耀皮肤图片\\' + hero_name[i])


 上面代码表示进入创建好的文件夹


点击小乔英雄,然后查看网页源代码,发现其中的数据非常不规则,要做的就是提取数据,并进行数据清洗

王者荣耀角色扮演游戏Java代码 安卓王者代码_王者荣耀角色扮演游戏Java代码_07

#经过一系列转化,将皮肤转成列表格式方便遍历
pifu = re.compile('<ul class="pic-pf-list pic-pf-list3" data-imgname="(.*?)">', re.S)
ssss = pifu.findall(r.content.decode("gbk"))[0]
aaaa = ssss.replace("|", "")
# print(aaaa)
bbbb = re.sub(r'&\d*', '", "', aaaa)
cccc = '["{}"]'.format(bbbb)
# 将字符串转化为列表
dddd = eval(cccc)
# 删除列表最后的""
del dddd[-1]
# print(dddd)

以上代码实现的功能是构建皮肤名称列表,即从下图的ssss到dddd的转变,大家可以自己取试试

ssss: 正义爆轰&0|地狱岩魂&12|无尽征程&1
dddd: ['正义爆轰', '地狱岩魂', '无尽征程']

ssss: 恋之微风&0|万圣前夜&0|天鹅之梦&26|纯白花嫁&11|缤纷独角兽&12|丁香结&1|青蛇&12|音你心动&15
dddd: ['恋之微风', '万圣前夜', '天鹅之梦', '纯白花嫁', '缤纷独角兽', '丁香结', '青蛇', '音你心动']

这一过程 和上面的③小插曲很像,只不过这个是在每一个英雄相关url里面构造了皮肤的名称,可以遍历皮肤图片和名称也可以很好的对应(不是正向就是逆向)。


for k, l in enumerate(dddd):
            # print(k+1, l)
            # 拼接url
            onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(j) + '-bigskin-' + str(k+1) + '.jpg'
            im = requests.get(onehero_link)  # 请求url
            if im.status_code == 200:
                f = open(str(l) + '.jpg', 'wb')
                print('{}正在下载{}皮肤😁😁'.format(i, l))
                f.write(im.content)  # 写入文件
                f.close()


for k, l in enumerate(dddd):


enumerate()函数一般用于for循环,可以在遍历中获得索引和元素值

 

王者荣耀角色扮演游戏Java代码 安卓王者代码_数据_08

接下来构建图片的url,然后将该图片保存到创建好并打开的文件夹中。

一定别忘了f.close(),因为代码不是with open()as f:的格式

最后调用该自定义函数即可运行

3.源代码展示

import os
import requests
import re

url = 'https://pvp.qq.com/web201605/js/herolist.json'
herolist = requests.get(url)  # 获取英雄列表json文件
# print(herolist.text)
herolist_json = herolist.json()  # 转化为json格式
# print(herolist_json)
hero_name = list(map(lambda x: x['cname'], herolist.json()))  # 提取英雄的名字
# print(hero_name)
hero_number = list(map(lambda x: x['ename'], herolist.json()))  # 提取英雄的编号
# # 尝试过从json文件中提取数据,如下,虽然提取到了,但是如果要将它和皮肤名字一一对应,恐怕有点难
# # skin_names = re.compile('"skin_name": "(.*?)"', re.S)
# # sss = skin_names.findall(herolist.text)
# # print(sss)
# # ['正义爆轰|地狱岩魂', '恋之微风|万圣前夜|天鹅之梦|纯白花嫁|缤纷独角兽', '苍天翔龙|忍●炎影|未来纪元|皇家上将|嘻哈天王|白执事|引擎之心', '和平守望|金属风暴|龙骑士|进击墨子号', '魅
#
# yx_urls = 'https://pvp.qq.com/web201605/herodetail/{}.shtml'

# 下载图片
def downloadPic():
    i = 0
    for j in hero_number:
        yx_url = 'https://pvp.qq.com/web201605/herodetail/{}.shtml'.format(str(j))
        r = requests.get(yx_url)
        # 创建文件夹
        try:
            os.mkdir(r'E:\Python社区版\王者荣耀皮肤图片\\' + hero_name[i])
        except:
            pass
        # 进入创建好的文件夹
        os.chdir(r'E:\Python社区版\王者荣耀皮肤图片\\' + hero_name[i])
        i += 1
        # #经过一系列转化,将皮肤转成列表格式方便遍历
        pifu = re.compile('<ul class="pic-pf-list pic-pf-list3" data-imgname="(.*?)">', re.S)
        ssss = pifu.findall(r.content.decode("gbk"))[0]
        # print("ssss:", ssss)
        aaaa = ssss.replace("|", "")
        # print("aaaa:", aaaa)
        bbbb = re.sub(r'&\d*', '", "', aaaa)
        cccc = '["{}"]'.format(bbbb)
        # 将字符串转化为列表
        dddd = eval(cccc)
        # 删除列表最后的""
        del dddd[-1]
        # print("dddd:", dddd)

        for k, l in enumerate(dddd):
            # print(k+1, l)
            # 拼接url
            onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(j) + '-bigskin-' + str(k+1) + '.jpg'
            im = requests.get(onehero_link)  # 请求url
            if im.status_code == 200:
                f = open(str(l) + '.jpg', 'wb')
                print('{}正在下载{}皮肤😁😁'.format(i, l))
                f.write(im.content)  # 写入文件
                f.close()
# #
#         # w = len(hero_name)-j+1
#         # print("{}的皮肤下载成功!!".format(hero_name[w]))
#
downloadPic()

4.结果展示

王者荣耀角色扮演游戏Java代码 安卓王者代码_Python_09

秘密就是赵云真是TiMi亲儿子,皮肤最多

王者荣耀角色扮演游戏Java代码 安卓王者代码_数据_10

王者荣耀角色扮演游戏Java代码 安卓王者代码_王者荣耀角色扮演游戏Java代码_11

 

王者荣耀角色扮演游戏Java代码 安卓王者代码_python_12

二、将好看的皮肤设置为pycharm背景

首先file---settings,接下来操作如下图

王者荣耀角色扮演游戏Java代码 安卓王者代码_数据_13

其中的4可以设置背景不透明度,建议各位好好调调,在享受背景的时候不受背景影响(正所谓鱼和熊掌不可兼得,背景太亮会影响看代码的效率😁😁) 

❤如果觉得笔者写的不错的,麻烦给个三连❤