python3爬虫系列之使用requests爬取LOL英雄图片

2023-11-10

我们最终目的就是要把抓取到的图片保存到本地,所以先写一个保存图片的方法(可以保存任何二进制文件)。注意在windows下文件命名包含/ | ?可能会发生错误,有的英雄皮肤名称确实包含/,所以这里使用正则表达式替换下。方法包含文件路径,文件名称,文件内容,简单粗暴一些。

def save_image(image_dir,image_name,image_content):
 if not os.path.exists(image_dir):
  os.makedirs(image_dir)
 try:
  hero_image_path = os.path.join(image_dir,re.sub(r'[/|?]','',image_name))
  with open(hero_image_path, 'wb') as image:
    image.write(image_content)
  except Exception as e:
    print('{}保存失败,错误原因:{}'.format(hero_image_path,e))

爬取数据就是模拟浏览器请求,经过查看英雄联盟英雄资料页面,都是get请求,这里把使用requests请求写到一个函数里,减少些重复代码。这里把headers放到self里,奔着面向对象的思路。

def send_get(self,url):
  try:
    resp = requests.get(url,headers = self.headers)
    assert resp.status_code == 200,'{}请求失败'.format(url)
    return resp
  except Exception as e:
    print(e)
    return None

下面F12再分析一下英雄联盟英雄资料页面数据,我们的思路是先在英雄列表得到所有的英雄信息,然后依次循环爬取单个英雄的信息,得到单个英雄的所有皮肤。
如果直接爬取英雄列表页面地址url,会发现是获取不到英雄列表数据的,因为页面是异步加载的,也可以看作是前端和后台数据分离的,你爬或不爬,页面就在那里,英雄列表数据是动态请求的。
仔细看F12里的网络请求,可以看到有一个js请求(前端页面请求后台数据通常都是触发js事件),地址如下:

https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js

看一下这个请求的响应信息,可以看到就是页面的英雄列表信息,所以我们向这个地址发起请求获取所有英雄的列表。大概就是酱紫:
在这里插入图片描述

随手截了一个图,最后一个英雄也是我的最爱,曙光女神(日女),再看下单个英雄的页面,需要找到单个英雄的地址,然后逐个去请求获取数据。女神的页面数据是酱紫的:
在这里插入图片描述

单个英雄的地址如下:

https://game.gtimg.cn/images/lol/act/img/js/hero/89.js
#等待动态拼接
https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js

英雄列表数据有了,单个英雄的请求地址也找到了,下面就可以大胆地发起请求了,可以看到英雄列表和单个英雄信息返回的都是json格式的数据,就是python中的字典类型。
最后在单个英雄的返回数据中找到皮肤的图片地址,发起请求获取图片内容即可,然后调用之前写好的保存图片的方法即可。

def process_hero(self,**hero_info_dict):
 hero = hero_info_dict['hero']
 skins = hero_info_dict['skins']
 for skin in skins:
 # 获取图片内容
   if skin['mainImg']:
      skin_content = self.send_get(skin['mainImg']).content
      hero_image_name = '{}.jpg'.format(skin['name'])
      hero_image_dir = os.path.join(self.base_path, hero['name'] + hero['title'])
      self.save_image(hero_image_dir,hero_image_name,skin_content)
      print('hero:{},skins:{}张,处理完成'.format(hero['name'],len(skins)))
      time.sleep(1)

完整代码已经扔到小编的github上了,欢迎来搞,一起开撸。

https://github.com/maidepiao/xiaomai_python3_little_by/blob/master/爬虫/英雄联盟图片爬取.py

英雄联盟所有英雄数据就这样轻轻松松爬取好了,这里以角色英雄名称为文件夹保存英雄皮肤,结果如图所示:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python3爬虫系列之使用requests爬取LOL英雄图片 的相关文章

  • 等响度曲线_什么是“响度”

    转自 https blog csdn net weixin 36225384 article details 112220422 原文 https www tonmeister ca wordpress 2014 06 07 bo tech
  • 正则表达式 匹配美元等多种货币符号的超简单方法

    p Sc 带小数点也不怕 Symbol Meaning p a character with the xx property Sc Currency symbol 方法二 暴力匹配 正则表达式 xA2 xA5 u058F u060B u09
  • QT开发之QString转换之路

    编程中少不了字符串的使用 QT提供了QString变量类型 字符串链表可直接使用QStringList进行变量定义和声明 那如果使用了其他表示字符串的变量应该怎么相互转化呢 这里就列举几个常用的几个类型之间的转化 错误之处 还望指出批评 1
  • 蓝桥杯2023模拟赛 滑行题目编号2414

    问题描述 小蓝准备在一个空旷的场地里面滑行 这个场地的高度不一 小蓝用一个 n 行 m 列的矩阵来表示场地 矩阵中的数值表示场地的高度 如果小蓝在某个位置 而他上 下 左 右中有一个位置的高度 严格 低于当前的高度 小蓝就可以滑过去 滑动距
  • 当你在浏览器中输入了网址访问时产生了哪些技术步骤

    当你在浏览器中输入了网址访问时产生了哪些技术步骤 前段时间在知乎上了看一些网络方面的知识 刚好小编自己也是从事这一块的相关工作由对网络方面有一定的了解 今天我们来讲讲 当你在浏览器中输入本站域名并回车后 这背后到底发生来什么事情 因平台原因

随机推荐

  • 如何让IE8及以下版本浏览器支持HTML5新的定义元素?

    如何让IE8及以下版本浏览器支持HTML5新的定义元素 1 我们都知道HTML5在HTML4的基础上 增加了很多新的特性和元素 其中也包括定义元素 比如 header section footer aside nav 但是这些元素在低版本的
  • 记一次个别网站不能访问的问题

    这是天猫的网站 之前我突然电脑不能访问这些网站 我试了很多种办法 都是失败 1 修改用户名 2 修改本地策略 3 后来又把浏览器 包括ie全部设置清除 4 还去选了下自动获取dns 最后我用cmd gt net int ip reset g
  • RuntimeError: CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling `cublasSgemm( handle, opa, opb

    今天跑一个项目时遇到了如下问题 RuntimeError CUDA error CUBLAS STATUS EXECUTION FAILED when calling cublasSgemm handle opa opb m n k alp
  • 【GUI】LVGL8内存泄漏分析

    LVGL版本 V8 0 2 平台 ESP32S3 在调试过程中 发现有两个界面 在重复退出再进入时内存会不断增加的吃内存现象 然后做了分析和研究 1 样式style吃内存 在主页面 进入simple页面 再退出到主页面 再次进入simple
  • eNSP搭建USG6000V防火墙教程-web

    eNSP搭建USG6000V防火墙教程 web 1 先注册设备 很重要 一定要先注册设备 2 创建USG6000V 3 启动防火墙和连接客户机 3 开启一系列的功能和配置ip 4 避坑指南 1 先注册设备 很重要 一定要先注册设备 2 创建
  • vscode使用json后在浏览器报404not found

    user id 1 show 玲珑骰子安红豆 入骨相思知不知 name 王维 id 2 show 五花马 千金裘 name 李白 id 3 show 仰天大笑出门去 我辈岂是蓬蒿人 name 李白 list 王维 李白 如上是我写的json
  • c语言编程请增补函数fun

    题目 填空题 请增补函数fun 该函数的功能是 把从主函数中输入的字符串str2接在字符串str2的背面 例似 str2 How do str2 you do 结论输出 How do you do 试题程序 include include
  • 第十二届蓝桥杯国赛-H:和与乘积-python

    一 问题描述 二 问题分析 对于输入的一个数列 求这个数列的满足以下条件的区间个数 该区间的元素和与元素积相等 思路就是计算每一个区间的元素和与元素积 如果相等就计数加一 获取每个区间采用前缀和跟前缀积的方法 详见代码 注 这种方法也只能通
  • Sass语法学习

    1 编译监控 自动监控把sass编译成css文件 命令行 sass watch sass basic scss css basic css 在监控的sass后面 可以为 sass 生成 css 样式指定生成的格式 默认是nested型 st
  • 手机端网页:可拖拽悬浮按钮

    div style width 60px height 60px img src im div
  • cesium for unreal文档中的更新

    以前调试过cesium for unreal 再调试时一惊 发现api变了 静下心来思考流程 1 样本条要放在actor里 2 包含样本条的actor坐标放在原点 3 样本条坐标和法向量都要从经纬高到ue空间转换 变的只是api 所以深入了
  • 服务端架构:Mybatis-Plus的优缺点

    前段时间帮朋友处理java后端架构问题 看到了mybatis plus 其实早几年就知道这个东西 但一直没用没学 这两天许久未见的web服务看了看 聊聊个人感受 如有不适 请见谅 文章目录 优点 缺点 1 对数据访问层DAO的上层入侵太强
  • 死锁算法:银行家算法和安全性算法

    死锁算法 银行家算法和安全性算法 借鉴了一些文章 自己总结了一下 银行家算法 首先 算法的核心在于 每次进程申请资源时 都会进行一次试探性分配 若成功 则真实分配 基本思想 在每个新进程进入系统时 他必须声明在运行过程中 可能需要的每种资源
  • 多线程(重点)

    进程和线程的区别 1 根本区别 进程是操作系统进行资源分配的最小单元 线程是操作系统进行运算调度的最小单元 2 从属关系不同 进程中包含了线程 线程属于进程 3 开销不同 进程的创建 销毁和切换的开销都远大于线程 4 拥有资源不同 每个进程
  • 高性能计算实验——矩阵乘法基于MPI的并行实现及优化

    高性能计算实验 矩阵乘法基于MPI的并行实现及优化 1 实验目的 1 1 通过MPI实现通用矩阵乘法 1 2 基于MPI的通用矩阵乘法优化 1 3 改造实验1成矩阵乘法库函数 2 实验过程和核心代码 2 1 通过MPI实现通用矩阵乘法 2
  • 【Git学习】6.分支(branch)创建、修改与合并

    查看log 附带 graph可以查看其他分支 建立分支 branch dev 查看分支 有 说明HEAD指针在master分支 用checkout指令把指针切换到dev 查看分支 直接checkout b指令 可以省略上述步骤 直接创建并切
  • Java file outside of soure root 导入项目时idea无法识别为java文件

    一 问题描述 今天一个小师弟私信我 导入别人的项目时 idea没有识别出是Java项目 Java file outside of soure root 二 解决 在idea重新设置一下就好了 1 打开File gt Project Stru
  • 阿里云—(1)安装JDK 11

    1 查看原有JDK版本 若新装系统 可忽略 yum list installed grep java 如图所示 代表已安装 2 查看yum库内所有的JDK版本 yum y list java 当你已经安装了某个版本后 显示的为本地安装包 下
  • MySQL调优学习笔记(三):组合索引和函数索引

    目录 什么是组合索引 组合索引的优势 什么是函数索引 函数索引的优势 总结 参考资料 姜承尧的MySQL实战宝典 什么是组合索引 组合索引是指由多个列所组合而成的B 树索引 组合索引既可以是主键索引 也可以是二级索引 组合索引 a b 和组
  • python3爬虫系列之使用requests爬取LOL英雄图片

    我们最终目的就是要把抓取到的图片保存到本地 所以先写一个保存图片的方法 可以保存任何二进制文件 注意在windows下文件命名包含 可能会发生错误 有的英雄皮肤名称确实包含 所以这里使用正则表达式替换下 方法包含文件路径 文件名称 文件内容