利用requests和urlretrieve爬取并下载英雄联盟所有英雄皮肤高清大图

· 不知道屏幕前的你是不是也是一名loler,最近学习爬虫,印象中以前看过爬取英雄联盟的帖子,所以也就自己试了试,结果很是满意,先上效果图。
亲女儿拉克丝

下面开始手把手教你如何爬取英雄联盟英雄皮肤。

一、分析页面

首先我们先去英雄联盟资料站官网,地址是https://lol.qq.com/data/info-heros.shtml,然后分析他的页面,先查看页面源码,以剑魔为例,可以看到他的名字和头像的图片链接都在id="jSearchHeroDiv"的ul节点下面的li节点中,一个英雄就是一个li节点
点进剑魔主页,地址是https://lol.qq.com/data/info-defail.shtml?id=Aatrox检查皮肤,可以看到不同皮肤只是id(这个ID很重要,后面还会提到)不一样

知道了这些信息后,我们先直接请求皮肤站页面,看下id="jSearchHeroDiv"的ul节点是什么结果

import requests
from pyquery import PyQuery as pqurl = "https://lol.qq.com/data/info-heros.shtml"
headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",}
response = requests.get(url,headers = headers)
response.encoding = "GBK"
html = response.text
doc = pq(html)
print(doc("#jSearchHeroDiv"))


发现并没有出来结果,由此可以知道该页面内容是通过js加载出来的,打开Network选项卡,筛选JS请求,然后发现有一个champion.js,点到Preview选项卡,可以看到这里面的数据正好就是英雄信息,再往下啦还可以看到每个英雄的详细信息,然后点进headers选项卡得知他的url为https://lol.qq.com/biz/hero/champion.js


然后同理可以分析皮肤界面,也是通过js加载的,检查剑魔的皮肤界面,筛选js请求,同样可以找到一个Aatrox.js,里面的信息就是皮肤的具体信息和id,这里的id刚好就是上面分析页面时发现的不同皮肤对应的不同ID。他的信息是\u+数字的形式,这其实是unicode编码而言,爬取的时候只要给他转码就可以看到具体信息了(后面会展示)。点击他的header,发现他的url为https://lol.qq.com/biz/hero/Aatrox.js。然后在所有请求中可以看到big+ID.js,点开进入Preview选项卡发现正是皮肤大图,点击Header选项卡,发现发现url为https://osswebimg.qq.com/images/lol/web201310/skin/big +ID+.jpg的形式。


然后在选择别的英雄进行对比,可以发现,对于每个英雄而言包含皮肤信息的js地址都是https://lol.qq.com/biz/hero/ + 英雄名字+.js的形式,每一个皮肤大图都是https://osswebimg.qq.com/images/lol/web201310/skin/big +ID+.jpg的形式。不过这里的英雄名字都是他们的英文名,还记得我们在champion.js里看到的信息吗,不就正是我们所需要的英雄名称吗?至此我想大家已经有一个爬取思路了。

1、通过获取champion.js里面的信息,得到英雄英文名称
2、通过英雄英文名称就可以去请求每个英雄的具体信息,得到皮肤ID
3、最后请求https://osswebimg.qq.com/images/lol/web201310/skin/big +
ID
+.jpg获得皮肤高清大图

知道思路后那么我们就按照这个思路开始我们的爬虫吧

二、获取英文名称

首先我们请求先请求"https://lol.qq.com/biz/hero/champion.js"

url = "https://lol.qq.com/biz/hero/champion.js"
headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",}
response = requests.get(url,headers = headers)
response.encoding = 'GBK'
html = response.text
print(html)


获得的数据和我们在网页中查看的一样,去掉头部就是字典类型,为了操作方便我们将其转换成json类型,然后再看看结果

data = json.loads("{"+response.text.strip("if(!LOLherojs)var LOLherojs={};LOLherojs.champion=")+"}")
#去掉头部的字符串后发现头尾的{}也跟着取消了 ,所以在头尾加上{}

这样是不是就好看多了,分析的可以在网页的preview选项卡里分析,哪里分好了层更加清晰明了,我们从中分析出ID为英雄的英文名,name+title就是完整的中文名称,比如暗裔剑魔 亚托克斯,我们也将他的id和中文名称拿出来,ID作为后面请求皮肤页面的字段,中文名称我们作为最后保存图片时文件夹的名称。

hero_id_lists = []
hero_chinese_names = []
hero_english_names = data.get("data").keys()
for hero_english_name in hero_english_names:hero_id_lists.append(hero_english_name)
print(hero_id_lists)
for hero_id in hero_id_lists:first_name = data.get("data").get(hero_id).get("name")second_name = data.get("data").get(hero_id).get("title")hero_chinese_name = "{0} {1}".format(first_name,second_name)#print(hero_chinese_name)hero_chinese_names.append(hero_chinese_name)
print(hero_chinese_names)

三、获取皮肤ID

在这里以剑魔为例,我们来获取到他的所有皮肤的地址,同理删掉头部转换为json格式

id = hero_id_lists[0]
hero_url = "https://lol.qq.com/biz/hero/"+id+".js"
response = requests.get(hero_url,headers=headers)
data = json.loads("{"+response.text.strip("if(!LOLherojs)var LOLherojs={champion:{}};LOLherojs.champion."+id+"=")+"}")
print(data )


在网页的preview选项卡中观察结构从中分析出皮肤的ID和皮肤的名称,

skins = data.get("data").get("skins")
skin_ids = []
skin_names = []
skin_urls = []
for skin in skins:skin_names.append(skin.get("name"))skin_ids.append(skin.get("id"))
skin_names[0] = hero_chinese_names[0] #默认皮肤名称为default,因此将其改成对应的名称
print(skin_names)
for skin_id in skin_ids:skin_url = "https://ossweb-img.qq.com/images/lol/web201310/skin/big" + skin_id + ".jpg"skin_urls.append(skin_url)
print(skin_urls)


然后检查一下获得的皮肤url是否和网页上的一致。皮肤url用来下载图片,皮肤名称用来命名图片名称。

四、下载并保存皮肤图片

得到的皮肤url后就到了我们最后一步下载了。下载我们使用urlretrieve函数,这个函数一般传2个参数,第一个参数是url,第二个参数是文件名称。我们先查找文件夹,如果不存在先创建文件,然后在里下载数据。

for j in range(len(skin_ids)):filename = "F:\\Skin\\"+ hero_chinese_names[0] + "\\"+skin_names[j] + ".jpg"  filepath = "F:\\Skin\\"+ hero_chinese_names[0] + "\\"#print(filename)if not os.path.exists(filepath):os.makedirs(filepath)urlretrieve(skin_urls[j],filename = filename)print("成功下载完"+skin_names[j]+"的皮肤图片")
print("------皮肤下载完成------")


可以看到成功创建了文件夹并下载了图片,而且以皮肤名称明了名。相信你会了一个英雄的皮肤下载那么所有英雄的下载肯定也会了。

五、结语

本人也是python初学者,写博客的目的是为了记录自己的学习过程,希望能帮到也是初学者的你。有哪里不懂尽管留言。源码我就不贴了如果有需要请留言。

手把手教你爬取并下载英雄联盟所有英雄皮肤高清大图相关推荐

  1. 【Python爬虫系列教程 18-100】Python网络爬虫实战:小姐姐手把手教你爬取并下载英雄联盟所有英雄皮肤高清大图

    文章目录 前言 一.分析页面 二.分析第二个页面 三.代码 四.下载结果 前言 上次教你怎么爬取王者荣耀,今天小姐姐教你使用几十行代码下载英雄联盟所有皮肤,你看我下载的九尾妖狐.

  2. python 批量下载网页图片_手把手教你爬取天堂网1920*1080大图片(批量下载)——实战篇|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ /1 前言/ 上篇文章 手把手教你爬取天堂网1920*1080大图片(批量下载)--理论篇我们谈及了天堂网 ...

  3. 【爬虫】Yhen手把手教你爬取表情包,让你成为斗图界最靓的仔!

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业用途,转载请说明出处,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/art ...

  4. 手把手教你爬取清纯小姐姐私房照,小孩子写学

    手把手教你爬取清纯小姐姐私房照,小孩子写学 先上效果图 头文件: 因为爬虫需要用到请求网络部分,所以需要这两个包,没有的话自行下载即可.这个可以直接用pip安装.如果连pip都不懂,那就只能学习一下p ...

  5. 手把手教你爬取PC端『某酷视频』个人历史播放数据,并可视化展示

    大家好,我是阿辰,今天手把手教你爬取PC端『某酷视频』个人历史播放数据,并可视化展示 上次有粉丝说,那个是ios手机,安卓手机现在需要root权限才可以安装证书,那么今天就不以手机为例,以电脑PC端为 ...

  6. Python爬虫——手把手教你爬取王者荣耀英雄皮肤

    大家好!我是霖hero 大家知道目前最火的手游是哪个嘛,没错,就是王者荣耀,这款手游想必大家都听过或者玩过吧,里面有106个英雄,几百个英雄皮肤,今天我来手把手教你们把几百个皮肤都爬取下来. 目录 P ...

  7. 怎么批量在数字里加入网页_手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇

    /1 前言/ 平时我们要下载图片,要要一个一个点击下载是不是觉得很麻烦?那有没有更加简便的方法呢?答案是肯定的,这里我们以天堂网为例,批量下载天堂网的图片. /2 项目准备工作/ 首先 我们第一步我们 ...

  8. 手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 不经一番寒彻骨,怎得梅花扑鼻香. ...

  9. 手把手教你爬取任意日期全部股票分时数据~

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 独怜幽草涧边生,上有黄鹂深树鸣. ...

  10. 以『公众号』为例,手把手教你爬取PC端数据

    之前教过大家如何爬取手机APP数据[以某乎为实战案例,教你用Python爬取手机App数据] 思路:主要是通过手机设置代理,然后在pc端开启抓包工具获取数据包,然后在编写python代码(get方式) ...

最新文章

  1. matlab绘制立体条形图
  2. 【Machine Learning】机器学习の特征
  3. IIS7 / IIS7.5 URL 重写 HTTP 重定向到 HTTPS(转)
  4. Davinci及U-boot的一些介绍
  5. pandas object转float_25个Pandas实用技巧
  6. 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)
  7. Java技术面试汇总
  8. samba服务器的设置
  9. ERP系统多少钱一套?不同情况详情分析告诉你!
  10. HyperMesh入门笔记
  11. 一线城市高薪IT人和老家公务员,你觉得选哪个会更「香」?
  12. 饥荒联机版steam专用服务器创建
  13. PUM-main makefile报错 #error -- unsupported GNU version gcc versions later than 6 are not supported
  14. Hyperledger caliper 安装记录
  15. SQL计算日环比、周同比
  16. python坐标表示_已知经纬度坐标求两点间距离,用python表示
  17. MEM/MBA数学强化(08)数据分析
  18. 180°舵机角度控制(mg996 + stm32F1)
  19. win10卸载Ubuntu14:Mbrfix方法卸载失败
  20. Python输入一个年份,判断是否为闰年

热门文章

  1. 2020年408真题_2020年港澳台联考真题——英语!
  2. 互斥机制synchronized学习
  3. ASP.NET 超市管理系统
  4. 国庆头像生成器小程序源码
  5. 肝通宵写了三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富,建议收藏+三连好评!
  6. python程序输出田字格_Python程序练习题5.1-输出更大的田字格。
  7. sl4a+android截屏,使用SL4A Python在android桌面上显示数据(示例)
  8. 计算机xp画板在哪找,xp画图工具 xp画图工具在哪里 | 帮助信息-动天数据
  9. 三星S5P6818工控底板 (ARM Cortex-A53架构)
  10. MD5的认识,建议所有菜菜都看下