Python3爬取英雄联盟所有英雄皮肤

上一次爬取了王者荣耀的所有皮肤,比较感兴趣然后再继续爬取英雄联盟的皮肤


打开英雄联盟官网,点击游戏资料,继续按F12,按F5刷新,就会发现有一个champion.js文件,复制这个js文件的地址.和王者荣耀不同,这个是js而王者是json比较好处理。js中有英雄的编号和名字,将keys中的数据拿出来

通过requests的get方法获取到响应的内容,pat_js是正则的规则,compile函数将包含的正则表达式的字符串创建模式对象,直接调用findall方法。返回的就是匹配的字串以列表的形式显示。eval将其转换为字典

def path_js(url_js):

res_js = requests.get(url_js, verify= False).content

html_js = res_js.decode("gbk")

pat_js = r'"keys":(.*?),"data"'

enc = re.compile(pat_js)

list_js = enc.findall(html_js)

dict_js = eval(list_js[0])

print(dict_js)

--------------------------------------------------------------------------------------------------------

在页面中点开英雄资料,没有英雄的皮肤url,需要右键,在新标签页打开,获取到连接http://ossweb-img.qq.com/images/lol/web201310/skin/big266000.jpg

根据获取到的链接分析,big后前三个数字代表英雄的编号,后三个代表皮肤的个数,根据此来拼接获取皮肤图片的链接。每个英雄的皮肤不超过20个,以此来循环获取拼接。(获取的链接会有大量的没有响应的链接)

def path_url(dict_js):

pic_list = []

for key in dict_js:

for i in range(20):

xuhao = str(i)

if len(xuhao) == 1:

num_houxu = "00" + xuhao

elif len(xuhao) == 2:

num_houxu = "0" + xuhao

numStr = key + num_houxu

url = r'http://ossweb-img.qq.com/images/lol/web201310/skin/big' + numStr + '.jpg'

pic_list.append(url)

print(pic_list)

return pic_list

链接获取到之后,开始根据链接来下载皮肤

先生成文件的保存路径

'''

根据字典的value值获取英雄名字,将其作为文件名和保存路径

'''

def name_pic(dict_js, path):

list_filePath = []

for name in dict_js.values():

for i in range(20):

file_path = path + name + str(i) + '.jpg'

list_filePath.append(file_path)

print(list_filePath)

return list_filePath

接下来就是下载图片,将图片写入文件。(解决大量没有响应的链接)还是通过requests的get方法获取 响应,如果响应的text的内容是404,则结束本次循环,如果不是则将该图片写入文件保存。这样就不会下载大量的不能打开的空图片

def writing(url_list, list_filePath):

try:

for i in range(len(url_list)):

res = requests.get(url_list[i], verify=False)

if '404 page not found' in res.text:

print("该英雄皮肤下载完毕"), i

continue

with open(list_filePath[i], "wb") as f:

f.write(res.content)

except Exception as e:

print("下载图片出错,%s" % (e))

return False

获取到996个皮肤


至此,皮肤获取完毕。当然还可以优化,可以尝试使用多线程改进该程序,图片太多,单线程过慢。还有皮肤链接的生成问题,考虑是否有更好的解决办法,不会去生成大量无用的链接。程序会去请求这些无用的链接,造成大量资源浪费。


本文分享自微信公众号 - Python爬虫scrapy(python_scrapy)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP饭米粒

Swoft 2.0.3 重大更新,发布优雅的微服务治理

Swoft 是一款基于 Swoole 扩展实现的 PHP 微服务协程框架。Swoft 能像 Go 一样,内置协程网络服务器及常用的协程客户端且常驻内存,不依赖传...

12020
来自专栏程序猿声

十分钟教会你用Python写网络爬虫程序

在互联网时代,爬虫绝对是一项非常有用的技能。借助它,你可以快速获取大量的数据并自动分析,或者帮你完成大量重复、费时的工作,分分钟成为掌控互联网的大师。

12820
来自专栏PHP饭米粒

手把手撸PHP扩展 0x04: 梳理一下架构

首先,我们需要去实现一个协程库,这个协程库是与PHP本身无关的。也就是说,我们实现的这个协程库可以用在其他地方,不一定是给PHP用的,功能主要是和上下文切换有关...

12230
来自专栏PHP饭米粒

手把手撸PHP扩展 0x05: 协程创建(一)

首先,我们需要一个PHP可用的协程,根据梳理一下架构这篇文章的内容,我们需要在study_coroutine.h里面来定义:

10310
来自专栏谭小谭

多个系统间是怎么保证统一登录的

比如:淘宝网(www.taobao.com),天猫网(www.tmall.com),聚划算(ju.taobao.com),飞猪网(www.fliggy.com)...

51620
来自专栏萝卜大杂烩

把英雄分类,看 Python 带你上王者

王者荣耀这么久了,还没上王者?哈哈哈,看过来,是不是对英雄理解的不够透彻呢,是不是还没有很好的为英雄分类呢,今天就来看看英雄分类

7420
来自专栏萝卜大杂烩

豆瓣的最受欢迎影评,到底是怎么回事

前两天逛豆瓣,发现有些影评确实精彩,但是有些就。。。于是乎,就简单的爬了下豆瓣最受欢迎的影评,来看看受欢迎的影评都是何方大神写的。

11810
来自专栏算法与编程之美

Python|urllib库的一些应用

Python在用于爬虫时,在许多的关于爬虫的教程中,重点介绍并使用的是一个HTTP客户端库,requests库。然而,本篇文章介绍的是另外一个用来数据抓取的库:...

12330
来自专栏Java架构沉思录

Guava的布隆过滤器原来是这么回事儿

程序世界的算法都要在时间,资源占用甚至正确率等多种因素间进行平衡。同样的问题,所属的量级或场景不同,所用算法也会不同,其中也会涉及很多的trade-of...

24520
来自专栏7DGroup

性能分析之压力工具是否模拟出了前端的请求

我们都知道,现在的很多性能测试都从接口开始做了,而前端的性能成了一个独立的一部分。

9340

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励