Python爬虫练习之爬取英雄联盟皮肤

毕业设计还没有弄完,但又不想弄,就先写个爬虫换换心情吧。
爬取的是英雄联盟英雄的皮肤,不过首页的url地址没有我们想要的数据,需要找到真实的url地址,就是简单的json文本,过程比较简单,步骤都写在注释里面了,完整代码如下:

# 导入第三方库
import requests
from fake_useragent import UserAgent
import time
import jsonpath
import os
import re

'''
英雄联盟皮肤爬取
'''


class HeroSkins():
    # 初始化对象
    def __init__(self):
        # 所有英雄页面的url地址
        self.hero_list_url = "https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js"
        # 英雄详情页的url地址
        self.detail_url = "https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js"
        # 请求头
        self.headers = {"User-Agent": UserAgent().random}

    # 定义得到英雄ID的函数
    def getid(self, url):
        time.sleep(0.5)
        # 请求英雄页面的url地址
        response = requests.get(url, headers=self.headers).json()
        # 提取hero内的内容
        hero_list = response["hero"]
        # 新建英雄id的空列表
        hero_id_list = []
        # 遍历循环英雄列表
        for hero in hero_list:
            # 将英雄id加入到空列表
            hero_id_list.append(hero['heroId'])
        # 返回英雄id列表
        return hero_id_list

    # 定义得到皮肤的函数
    def get_skins(self, hero_id_list):
        # 创建文件夹
        if not os.path.exists("Hero Skins"):
            os.mkdir("Hero Skins")
        # 遍历循环英雄id
        for i in hero_id_list:
            # 构造英雄详情页的url地址
            url = self.detail_url.format(i)
            # 请求详情页的url地址
            ret = requests.get(url, headers=self.headers).json()
            # jsonpath提取皮肤的url地址,返回列表
            skin = jsonpath.jsonpath(ret, '$..mainImg')
            # jsonpath提取皮肤的名称,返回列表,去掉第一个重复的名称
            name = jsonpath.jsonpath(ret, '$..name')[1:-1]
            # 遍历循环皮肤地址,皮肤名称
            for skin, name in zip(skin, name):
                # 将名称中的敏感符号替换掉
                name1 = re.sub("/", "", name)
                # 判断皮肤列表中是否有空值,如果有则跳过
                if len(skin) == 0:
                    continue
                # 保存皮肤
                with open("Hero Skins" + "/" + name1 + ".jpg", "wb") as f:
                    print("正在写入:" + name)
                    r = requests.get(skin, headers=self.headers)
                    f.write(r.content)

    # 实现主要逻辑
    def run(self):
        url = self.hero_list_url
        hero_id_list = self.getid(url)
        self.get_skins(hero_id_list)


# 程序运行接口
if __name__ == '__main__':
    hero_spider = HeroSkins()
    hero_spider.run()

爬取结果的部分截图:
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值