马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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()
|