爬取英雄联盟英雄皮肤数据

爬取英雄联盟英雄皮肤数据

import requests
import jsonpath
import os
from urllib.request import urlretrieve      # 下载文件包
from lxml import etree

# 获取英雄ID
def get_id():
    response=requests.get('https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js').json()
    # print(response)   # 网页数据

    # jsonpath  $..heroId 表示json下所有的heroId
    hero_ids=jsonpath.jsonpath(response,'$..heroId')
    # 打印所有英雄名称及英雄个数
    # print(hero_ids)
    # print('英雄个数为: %d'%len(hero_ids))
    # print('英雄个数为: ' + str(len(hero_ids)))   # 两种表示方法效果相同
    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:
            # import os 创建文件
            # 如果知道父目录,只是在其下创建一个子目录的话,只需用os.mkdir(path)
            # 如果想同时新建多层目录,就需要使用makedirs  os.makedirs(path)
            # 需要格外注意:mkdir(正确) != mkdirs(错误) != makedirs(正确)
            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表示服务器的响应头

'''
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值