admin管理员组文章数量:1619285
目标网址:英雄联盟官网
思路:获取到跳转的url,通过请求url来获取想要的数据
使用浏览器的开发者调试工具(F12)对网页进行分析,通过判断数据是采用Ajax动态加载的。在network下的XHR中找到herolist.js,进行预览分析json的结构:
可以看到此时有148个英雄的信息。经过分析,跳转的链接前半部分是相同的,而最后的id也并不是简单的累加实现,这时候首先要获得全部英雄的id,就能生成对应的url,再接下来能获取到我们需要的数据。
import requests
import jsonpath
import os
from urllib.request import urlretrieve #用于下载图片
def get_id():
req = requests.get('https://game.gtimg/images/lol/act/img/js/heroList/hero_list.js').json()
banAudios = jsonpath.jsonpath(req, '$..banAudio')
print(banAudios)
print('全部英雄的数量为:' + str(len(banAudios)))
items = []
for banAudio in banAudios:
id = banAudio.split('ban/')[1][0:-4] #目的为获得每个英雄的id值
items.append(id)
#print(items)
return items
def get_skin(items):
for item in items:
url = 'https://game.gtimg/images/lol/act/img/js/hero/{}.js'.format(item)
req = requests.get(url, headers=headers).json()
skins = req['skins'] #只从skins下提取names,直接提取可能会获取到其他标签下的names
names = jsonpath.jsonpath(skins, '$..name')
loadingImgs = jsonpath.jsonpath(req, '$..loadingImg')
#每个英雄都存为一个独立的文件夹,在文件夹内保存对应英雄的皮肤
try:
if not os.path.exists(names[0]):
os.mkdir(names[0])
for name, loadingImg in zip(names, loadingImgs):
urlretrieve(loadingImg, names[0]+'/' + name + '.jpg')
except:
pass
def go(): #用于传递items
items = get_id()
get_skin(items)
if __name__ == '__main__':
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
go()
运行结果:
注意:在运行过程中如果遇到Invalid return character or leading space in header: User-Agent 错误
,这是由于从F12中复制请求头信息时在开头包含了空格,去掉空格即可。
版权声明:本文标题:Python爬取英雄联盟皮肤,并保存到本地 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728795139a1174094.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论