突然看到王者荣耀每个英雄的图片很不错,所有就一张一张保存了.
1.打开王者荣耀官方英雄列表
2.分析接口
3.实际操作
4.调整代码
5.开始启动程序
其中中间发现,获取的页面中并没有直接找到图片的地址, 所以先拿到皮肤名称拼接成图片链接,然后真正拿到高清无码皮肤图片
# -*- coding: gbk -*-#
# -------------------------------------------------------
# Name: WZRYImpageDemo
# Description: 多线程获取王者荣耀所有英雄高清皮肤
# Author: GMaya
# Date: 2020/4/6 14:56
# -------------------------------------------------------
import threading
import requests, json, re
# 创建会话对象
session = requests.session()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36',
'origin': 'https://pvp.qq.com'
}
# 获取所有英雄列表
def get_hero_list():
# 请求接口
result = session.get('https://pvp.qq.com/web201605/js/herolist.json', headers=headers)
# 解析json结果
resJson = json.loads(result.text)
for res in resJson:
# 英雄名称
cname = res.get('cname')
# 英雄详情页id
ename = res.get('ename')
# 多线程获取详细页
myThread(cname, ename).start()
# 获取英雄详情页面信息
def get_hero_tail(ename, cname):
# 请求接口
result = session.get('https://pvp.qq.com/web201605/herodetail/%s.shtml' % ename, headers=headers)
result.encoding = 'gbk'
zz = """"""
# 由于爬取的页面和网页上看到的实际效果不一致,所以这里拿取所有皮肤名称,直接去皮肤服务器拿取
res_tail = re.findall(zz, result.text)[0]
res_tail_list = res_tail.split('|')
count = 1
for tail in res_tail_list:
imgName = cname + '-' + tail
# 下载具体图片
get_hero_skin(ename, count, imgName)
count += 1
# 保存下载图片
def get_hero_skin(ename, i, imgName):
url = "http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/%s/%s-bigskin-%d.jpg" % (ename, ename, i)
# 拼接最后的图片地址,然后保存
res_skin = session.get(url)
file = 'D:\download\爬虫图片目录\王者荣耀图片\%s.jpg' % imgName
# wb : 以二进制格式打开一个文件只用于写入。一般用于非文本文件如图片等。
with open(file, 'wb') as f:
f.write(res_skin.content)
# 创建线程类
class myThread(threading.Thread):
def __init__(self, cname, ename):
threading.Thread.__init__(self)
self.cname = cname
self.ename = ename
def run(self):
print("开始线程:" + self.cname)
try:
get_hero_tail(self.ename, self.cname)
except Exception:
print('线程出现意外....' + self.name)
print("退出线程:" + self.cname)
if __name__ == '__main__':
# 开始
get_hero_list()
也没有具体的计算, 这三百多个将近四百个, 其中包含英雄本身的图片,所以真正的皮肤应该是200多个.应该是全了.说实话,300kb左右的图片, 已经很清楚了