Github项目地址 https://github.com/xylon666/Xylon_Code

爬取结果展示: 全原画+皮肤名称分类

所需环境

IDE:Pycharm

第三方库:requests,PIL

浏览器:Chrome

爬取目标:

LOL官网皮肤原画 https://lol.qq.com/data/info-heros.shtml#Navi

一、分析页面

与常规的静态网页不同,LOL官网是借由JavaScript脚本在客户端执行后才会展示完整页面的动态网页,直接使用requests请求获得的页面是没有英雄信息的,因此我们要采取一定的方案

鼠标右键原画检查页面,可以看到皮肤原画地址就在眼前

展开后发现原画的地址格为://ossweb-img.qq.com/images/lol/web201310/skin/big+皮肤ID+.jpg

那么我们就要考虑如何获取所有英雄的皮肤ID以及相关信息了

回到全部英雄页面,F12检查元素-Network-JS,找到一个champion.js文件,里面包含全部英雄的id和英文名
可以看到266就是剑魔的ID

当然,最终要有英雄中文名称和皮肤名称,光有id和英文名是不够的

再进入剑魔页面,检查元素,可以找到Aatrox.js

在网页中打开,可以看到剑魔的个人信息,id、英文名、中文名(Unicode编码)、称号、皮肤编号以及名称一应俱全

注意到页面地址为:https://lol.qq.com/biz/hero/Aatrox.js

也就是说,通过 "https://lol.qq.com/biz/hero/"+英雄英文名+".js" 我们可以访问任何一个英雄的全部信息,进而获取原画链接和名称将其下载下来

所以爬取思路就是:

1.获取champion.js里英雄的英文名称信息

2.访问"https://lol.qq.com/biz/hero/"+英雄英文名+".js",获得英雄具体信息

3.访问"//ossweb-img.qq.com/images/lol/web201310/skin/big"+皮肤ID+".jpg"下载原画

那么,开始写代码吧

二、获取英文名称

下载champion.js至本地

#encoding = 'utf-8'
import requests,json,os
from PIL import Image
from io import BytesIOurl = '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",
}
res = requests.get(url,headers = headers )
res.encoding = 'gbk'
html = res.text
print(html)

出去开头部分,剩下的就是字典类型,为了方便操作,我们将其处理为json类型

data = json.loads("{"+res.text.strip("if(!LOLherojs)var LOLherojs={};LOLherojs.champion=")+"}")
#删去开头部分
print(data)

通过字典查询可以方便快捷地提取英文名,以及中文名称,英文名进行下一步提取英雄完整信息,中文名称用于创建原画文件夹以及文件名

hero_names = data.get("data").keys()
print(hero_names)
heroid_list = []
hero_cnnames = []
for hero_name in hero_names:heroid_list.append(hero_name)
#print(heroid_list)
for heroid in heroid_list:#print(heroid)first_name = data.get("data").get(heroid).get("name")second_name = data.get("data").get(heroid).get("title")hero_cnname = first_name + " " + second_namehero_cnnames.append(hero_cnname)
print(hero_cnnames)

 三、获取皮肤ID

有了英文名,我们可以访问"https://lol.qq.com/biz/hero/"+英雄英文名+".js"来获取皮肤ID和名称

for i in range(len(heroid_list)):id = heroid_list[i]hero_url = 'https://lol.qq.com/biz/hero/' + id + '.js'res = requests.get(hero_url, headers=headers)data = json.loads("{" + res.text.strip("if(!LOLherojs)var LOLherojs={champion:{}};LOLherojs.champion." + id + "=") + "}")# print(data)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_cnnames[i]  # 将默认皮肤default的名称改为英雄名称#print(skin_names)

四、下载原画

从列表skin_ids中获取皮肤ID,组合原画地址再下载

自己在尝试下载的时候,发现K/DA系列一直下载失败,原来是 / 符号影响了文件路径的创建,所以加了一条try把斜杠删掉

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)
for j in range(len(skin_ids)):filename = "D:\\LOL\\" + hero_cnnames[i] + "\\" + skin_names[j] + ".jpg" #文件名filepath = "D:\\LOL\\" + hero_cnnames[i] + "\\"        #文件路径if not os.path.exists(filepath):                       #若文件夹路径不存在则新建一个os.makedirs(filepath)try:res = requests.get(skin_urls[j])image = Image.open(BytesIO(res.content))image.save(filename)print('成功下载' + skin_names[j] + '.jpg')except:sname = skin_names[j].replace('/', '')filename = "D:\\LOL\\" + hero_cnnames[0] + "\\" + sname + ".jpg"res = requests.get(skin_urls[j])image = Image.open(BytesIO(res.content))image.save(filename)print('成功下载' + skin_names[j] + '.jpg')

Python实战 | 完美爬取LOL全英雄皮肤高清原画 JavaScript动态网页相关推荐

  1. python爬取王者荣耀皮肤高清图

    python爬取王者荣耀皮肤高清图 前期准备,导入模块 requests json os 进入王者荣耀官网,进入游戏壁纸页面,f12进入开发者模式,按照下图找到这个json文件,用于对图片的数据请求. ...

  2. python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫

    一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...

  3. Python re库爬取阴阳师官网高清壁纸

    壁纸官方网址: https://yys.163.com/media/picture.html 导库 import requests import re from urllib import error ...

  4. Python实战,爬取金融期货数据

    大家好,我是毕加锁. 今天给大家带来的是 Python实战,爬取金融期货数据 文末送书! 文末送书! 文末送书! 任务简介   首先,客户原需求是获取https://hq.smm.cn/copper网 ...

  5. Python实战:爬取小说《盗墓笔记》

    Python实战:爬取小说<盗墓笔记> 题目要求 从网页 http://www.daomubiji.com/中可以看到<盗墓笔记>的每一本书,点开能够查看每一本书的具体内容.现 ...

  6. Python批量爬取王者荣耀英雄高清壁纸

    Python批量爬取王者荣耀英雄高清壁纸 文章目录 Python批量爬取王者荣耀英雄高清壁纸 前言 爬虫步骤 python代码实现 总结 前言 很多喜欢玩王者的朋友很希望把王者荣耀的英雄图片拿来做壁纸 ...

  7. Python 3.5_简单上手、爬取百度图片的高清原图

    利用工作之余的时间,学习Python差不多也有小一个月的时间了,路漫漫其修远兮,我依然是只菜鸟. 感觉学习新技术确实是一个痛并快乐着的过程,在此分享些心得和收获,并贴一个爬取百度图片原图的代码. 代码 ...

  8. Python 爬取百度图片的高清原图

    # coding=utf-8 """ 爬取百度图片的高清原图 Author : MirrorMan Created : 2017-11-10 ""&q ...

  9. 如何运用python爬游戏皮肤_Python爬虫实战之 爬取王者荣耀皮肤

    王者荣耀是目前非常火的一款游戏,相信大家都对其中的人物很感兴趣,那么今天就带大家来爬取王者荣耀的皮肤,可以选一款喜欢的来当电脑壁纸.第一步,拿到url地址 第二步,获取各个人物皮肤数据 第三步,保存文 ...

  10. Python爬虫实战之 爬取王者荣耀皮肤

    王者荣耀是目前非常火的一款游戏,相信大家都对其中的人物很感兴趣,那么今天就带大家来爬取王者荣耀的皮肤,可以选一款喜欢的来当电脑壁纸

最新文章

  1. 树形DP——Codeforces Choosing Capital for Treeland
  2. 深度对比Python(Numpy,Scipy)与Matlab的数值精度
  3. rawquery 没扎到返回什么_当mysql_query返回false时
  4. asp.net core轻松入门之MVC中Options读取配置文件
  5. html中怎么选择相同的代码,不同的HTML,相同的代码隐藏和相同的控件
  6. 图册图册图册图册图册图册
  7. CCNA-第四篇-OSI模型-下
  8. tcpmp 编译 源代码分析
  9. JSON.parse()解析单引号错误的问题
  10. itext 添加空格_itext7史上最全实战总结
  11. 部署Docker前必须问自己的四个问题
  12. LeetCode--057--插入区间(java)
  13. 第四季-专题13-总线设备驱动模型
  14. linux内核之dmaengine
  15. vue 自己捣鼓周日程日历组件(WSchedule)
  16. [工具推荐] IPv4 和 IPv6 网站测速工具
  17. js在一个指定元素前添加内容_Day036-JS
  18. ISCSI的target和initiator的部署
  19. [宋史学习] 结合水浒传看职役
  20. Pytorch中shuffle=True的作用

热门文章

  1. java程序员怎么创建自己的网站:第四章:做个网站引入广告赚点小钱
  2. 百度Site App的uaredirect.js实现手机访问,自动跳转网站手机版
  3. 马科维兹+matlab,“马科维茨”投资组合模型实践——第三章 投资组合优化:最小方差与最大夏普比率...
  4. 一个有趣的模型组合预测模型
  5. QQ空间内容批量删除脚本
  6. Qt 实现 别踩白块儿。
  7. 拉里·佩奇(Larry Page)的伟大归来
  8. 蜡笔小新配音怎么做?简单小技巧,软萌可爱的小新音你get了吗
  9. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias ' star.facade.vipuser.vo.
  10. H3C网络流量镜像配置