鱼C论坛

 找回密码
 立即注册
查看: 2115|回复: 2

[原创] 【Python】爬取王者荣耀全英雄全皮肤高清大图

[复制链接]
发表于 2019-10-7 17:02:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
'''
爬取王者荣耀全英雄全皮肤高清图
'''

import urllib.request
import os
import time

#打开一个页面
def open_page(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent',
                   'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36')
    reponse = urllib.request.urlopen(req)
    html = reponse.read()
    return html

#获取英雄:编号为键值对的字典,并为每个英雄创建一个文件夹
def get_hero(str):
    hero_dict = {}
    num_a = str.find('src="//game.gtimg.cn/images/yxzj/img201606/heroimg/') + 51

    while num_a != 50:
        num_b = num_a + 3
        hero_a = str.find('alt=',num_b) + 5
        hero_b = str.find('">', hero_a)
        hero = str[hero_a : hero_b]
        num = str[num_a : num_b]
        hero_dict[hero] = num
        os.mkdir(hero)
        num_a = str.find('src="//game.gtimg.cn/images/yxzj/img201606/heroimg/', num_b) + 51

    return hero_dict

#获取当前英雄皮肤名称:皮肤编号为键值对的字典
def get_skin(str):
    skin_dict = {}

    skin_a = str.find('data-imgname="') + 14
    skin_b = str.find('">', skin_a)
    skin = str[skin_a : skin_b]
    skin_list = skin.split('|')
    for i in range(len(skin_list)):
        skin_dict[skin_list[i]] = i + 1

    return skin_dict

#通过传入的皮肤名称和编号进行图片保存
def save_skin(hero_name, name, skin_num, hero_num):
    url = f'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{hero_num}/{hero_num}-bigskin-{skin_num}.jpg'
    html = open_page(url)
    file_name = hero_name + ' - ' + name + '.jpg'
    with open(file_name, 'wb') as f:
        f.write(html)
        time.sleep(3)

#定义主函数
def honor_skin():
    cnt = 0
    url_main = 'https://pvp.qq.com/web201605/herolist.shtml'
    url_part = 'https://pvp.qq.com/web201605/herodetail/'
    dirs = '荣耀皮肤'
    os.mkdir(dirs)
    os.chdir(dirs)

    html_main = open_page(url_main).decode('gbk')
    hero_dict = get_hero(html_main)

    for i in hero_dict:
        hero_num = hero_dict[i]
        url_hero = url_part + hero_num + '.shtml'
        html_hero = open_page(url_hero).decode('gbk')
        skin_dict = get_skin(html_hero)
        os.chdir(i)
        for key, value in skin_dict.items():
            save_skin(i, key, value, hero_num)
            cnt += 1
            print(f'已成功保存{cnt}张皮肤,别鸡巴着急,等着的....')
        print(f'{i} 的皮肤已下载完毕!')
        os.chdir('..')

#好习惯要坚持
if __name__ == '__main__':
    honor_skin()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-8 14:46:35 | 显示全部楼层
斯国一
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 11:31:02 | 显示全部楼层
这么好的帖子居然沉了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 12:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表