使用Google浏览器,Python版本3.6.5,
打开王者荣耀官网,按F12打开调试界面,点击Network按F5刷新,找到herolist.json。点击右键复制地址
http://pvp.qq.com/web201605/js/herolist.json
然后开始代码:获取这个Json文件里的内容
import urllib.request
import json
import os
response = urllib.request.urlopen("http://pvp.qq.com/web201605/js/herolist.json")
hero_json = json.loads(response.read())
hero_num = len(hero_json)
print(hero_json)
print("hero_num: ", str(hero_num))
print('------------------------')
运行代码:
获取一个英雄的英雄名、皮肤名和皮肤数量
hero_name = hero_json[0]['cname']
skin_names = hero_json[0]['skin_name'].split('|')
skin_num = len(skin_names)
print('hero_name : ', hero_name)
print('skin_name: ', skin_names)
print('skin_num', skin_num)
运行代码:
接下来就是获取皮肤的高清图了:
在官网页面打开王者资料页面,点击英雄图片进入(这里是孙策),继续前面的操作,按F12,按F5刷新,找到皮肤图片,复制图片地址http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/510/510-bigskin-1.jpg
继续代码:根据获取到的网址,在代码里拼所要获取图片的网址(510代表的是json中的ename,1是第几个皮肤)
for i in range(hero_num):
for cnt in range(len(skin_names)):
save_file_name = 'F:\heroskin\\' + str(hero_json[i]['ename']) + '-' + hero_json[i]['cname'] + '-' + skin_names[cnt] + '.jpg'
skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(hero_json[i]['ename']) + '/' + str(hero_json[i]['ename']) + '-bigskin-' + str(cnt+1) + '.jpg'
if not os.path.exists(save_file_name):
urllib.request.urlretrieve(skin_url, save_file_name)
完整代码:
import urllib.request
import json
import os
response = urllib.request.urlopen("http://pvp.qq.com/web201605/js/herolist.json")
hero_json = json.loads(response.read())
hero_num = len(hero_json)
print(hero_json)
print("hero_num: ", str(hero_num))
print('------------------------')
hero_name = hero_json[0]['cname']
skin_names = hero_json[0]['skin_name'].split('|')
skin_num = len(skin_names)
print('hero_name : ', hero_name)
print('skin_name: ', skin_names)
print('skin_num', skin_num)
# 文件不存在则创建
save_dir = 'F:\heroskin'
if not os.path.exists(save_dir):
os.mkdir(save_dir)
for i in range(hero_num):
# 获取皮肤名称列表
skin_names = hero_json[i]['skin_name'].split('|')
if hero_json[i]['ename'] == 189:
json_skin_name = {'skin_name': '阿摩司公爵|万物有灵'}
skin_names = json_skin_name['skin_name'].split('|')
for cnt in range(len(skin_names)):
save_file_name = 'F:\heroskin\\' + str(hero_json[i]['ename']) + '-' + hero_json[i]['cname'] + '-' + \
skin_names[cnt] + '.jpg'
skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(
hero_json[i]['ename']) + '/' + str(hero_json[i]['ename']) + '-bigskin-' + str(cnt + 1) + '.jpg'
if not os.path.exists(save_file_name):
urllib.request.urlretrieve(skin_url, save_file_name)
continue
for cnt in range(len(skin_names)):
# 保存的图片名
save_file_name = 'F:\heroskin\\' + str(hero_json[i]['ename']) + '-' + hero_json[i]['cname'] + '-' + skin_names[cnt] + '.jpg'
# 拼接的url
skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(hero_json[i]['ename']) + '/' + str(hero_json[i]['ename']) + '-bigskin-' + str(cnt+1) + '.jpg'
# 防止代码出错,重新运行后避免重复下载
if not os.path.exists(save_file_name):
# 使用request.urlretrieve模块
urllib.request.urlretrieve(skin_url, save_file_name)
问题:
不知道是不是腾讯故意的还是我获取的方式有问题,获取的json文件鬼谷子的皮肤名是一段文字,
获取的时候就会出错,最后使用最笨的办法解决,重新创建了鬼谷子皮肤名的json文件,
这样就可以完全获取全部的英雄皮肤图片。
本文分享自 Python爬虫scrapy 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!