Python爬取英雄联盟皮肤,并保存到本地

目标网址:英雄联盟官网
思路:获取到跳转的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.cn/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.cn/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中复制请求头信息时在开头包含了空格,去掉空格即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值