爬取英雄联盟英雄皮肤数据
import requests
import jsonpath
import os
from urllib.request import urlretrieve
from lxml import etree
def get_id():
response=requests.get('https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js').json()
hero_ids=jsonpath.jsonpath(response,'$..heroId')
return hero_ids
def get_skins(hero_ids):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
Chrome/84.0.4147.125 Safari/537.36 Edg/84.0.522.59'
}
for heroId in hero_ids:
url='https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js'.format(heroId)
response=requests.get(url=url,headers=headers).json()
skins=response['skins']
mainimgs=jsonpath.jsonpath(skins,'$..mainImg')
names=jsonpath.jsonpath(response,'$..name')
path = './lol英雄皮肤/' + names[0]
try:
if not os.path.exists(path):
os.makedirs(path)
for name,mainimg in zip(names,mainimgs):
urlretrieve(mainimg,path + '/' + name + '.jpg')
except:
pass
print('<%s>下载成功' %names)
if __name__=="__main__":
id_list=get_id()
get_skins(id_list)
'''
python3中urllib.request模块提供的urlretrieve()函数。urlretrieve()方法直接将远程数据下载到本地。
urlretrieve(url, filename=None, reporthook=None, data=None)
参数url:下载链接地址
参数filename:指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
参数reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
参数data:指post导服务器的数据,该方法返回一个包含两个元素的(filename, headers) 元组,filename 表示保存到本地的路径,header表示服务器的响应头
'''