失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_Python爬虫从入门到放弃 08 | Pyth

python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_Python爬虫从入门到放弃 08 | Pyth

时间:2023-09-25 05:00:32

相关推荐

python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_Python爬虫从入门到放弃 08 | Pyth

此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。

本文章纯野生,无任何借鉴他人文章及抄袭等。坚持原创!!

前言

你好。这里是Python爬虫从入门到放弃系列文章。我是SunriseCai。

本文章主要介绍利用爬虫程序下载 英雄联盟的 所有英雄的皮肤。

1. 文章思路

看看英雄联盟网站,如下多图所示:

首页(一级页面)

皮肤页面(二级页面)

图片(三级页面)

通过上面几张图片可以看出,这一套下来依旧是个俄罗斯套娃!!!

访问 首页(一级页面) 获取 所有英雄链接(二级页面)

访问 英雄链接(二级页面) 获取 图片链接(三级页面)

访问 图片链接(三级页面),保存图片。

那么,接下来的就是用代码实现下载图片了。

2. 请求 + 分析 网页

上面有说到,本文章的需请求的首页为/data/info-heros.shtml。

2.1 请求首页

浏览器打开 网站首页,点击F12,进入开发者模式。看看页面结构,发现了二级页面的链接就在

标签里面。perfect !!!

相信细心的你已经发现,二级页面url的规律为:/data/info-defail.shtml?id= 这一串字符后面跟一个数字,那这个数字是如何而来的呢?下面会讲解到。

首页请求代码:

import requests

url = '/data/info-heros.shtml'

headers = {

'User-Agent': 'Mozilla/5.0'

}

def get_hero_list():

res = requests.get(url, headers=headers)

if res.status_code == 200:

print(res.text)

else:

print('your code is fail')

!!!

执行上述代码之后,发现并没有上图中的

标签的内容,这是怎么回事呢?标签的内容极有可能是通过xhr异步加载出来的的文件,咱们来抓包看看!!

再次请求首页时候发现,在xhr这里,有一个hero_list.js文件,翻译过来就是英雄列表。

看到hero_list.js的url为 :/images/lol/act/img/js/heroList/hero_list.js

点击之后,发现这正是我们需要的内容!!!

就是这里,注意看画框红色的地方有一个heroId,这个就是上面说的二级页面url屁股的Id

在浏览器输入hero_list.js文件的地址,如下图:

非常好,请求代码也是很简单,只需要将上面代码的url替换为/images/lol/act/img/js/heroList/hero_list.js 即可。

2.2 请求二级页面(皮肤页面 )

这里以黑暗之女–安妮 为例,看到安妮共有13个皮肤。

抓包发现,有个1.js文件的数据刚好对应了安妮的13个皮肤。

1.js文件的url为:/images/lol/act/img/js/hero/1.js

2.js文件的url为:/images/lol/act/img/js/hero/2.js

当然了,这个后面的Id就是每个英雄的heroId。

用浏览器打开1.js文件的url,如下图所示:

看到1.js文件有几个img的url,他们所表示图片的像素比如下:

名称

像素比mainImg

980x500

iconImg

60x60

loadingImg

308x560

videoImg

130x75

sourceImg

1920x470

本次文章用mainImg做下载演示。

在这里,捋一下思路:

请求/images/lol/act/img/js/heroList/hero_list.js 获取英雄名称、Id。

根据Id去拼接英雄皮肤的url:/images/lol/act/img/js/hero/1.js(Id替换数字1)

上述请求后可以得到图片的url了,请求图片url即可。

3. 代码部分

3.1 代码:首页

请求首页,获取二级页面(皮肤页面的链接)import requests

url = '/images/lol/act/img/js/heroList/hero_list.js'

headers = {

'User-Agent': 'Mozilla/5.0'

}

def get_hero_list():

"""

:return: 获取英雄名称与heroId

"""

res = requests.get(url, headers=headers)

if res.status_code == 200:

data = json.loads(res.text)

for item in data['hero']:

id = item['heroId']

name = item['name']

title = item['title']

print(id, name, title)

else:

print('your code is fail')

get_hero_list()

结果如下:

3.2 代码:二级页面(皮肤页面)

import requests

skinUrl = '/images/lol/act/img/js/hero/{}.js'

headers = {

'User-Agent': 'Mozilla/5.0'

}

def get_skin_url(Id):

"""

:param Id: 英雄ID,用于拼接url

:return:

"""

res = requests.get(skinUrl.format(Id), headers=headers)

if res.status_code == 200:

data = json.loads(res.text)

for item in data['skins']:

url = item['mainImg']

name = item['name'].replace('/', '')

print(url, name)

else:

print('your code is fail')

get_hero_list()

结果如下:

值得注意的是,如果是一款皮肤有多个颜色的情况,则有可能不带mainImg的url。

3.3 完整代码

复制黏贴即可运行# -*- coding: utf-8 -*-

# @Time : /1/28 21:12

# @Author : SunriseCai

# @File : YXLMSpider.py

# @Software: PyCharm

import os

import json

import time

import requests

"""英雄联盟皮肤爬虫程序"""

class YingXLMSpider(object):

def __init__(self):

self.onePageUrl = '/images/lol/act/img/js/heroList/hero_list.js'

self.skinUrl = '/images/lol/act/img/js/hero/{}.js'

self.headers = {

'User-Agent': 'Mozilla/5.0'

}

def get_heroList(self):

"""

:return: 获取英雄的heroId,和英雄名称

"""

res = requests.get(url=self.onePageUrl, headers=self.headers)

if res.status_code == 200:

data = json.loads(res.text)

for item in data['hero']:

Id = item['heroId']

title = item['title']

self.get_skin_url(Id, title)

else:

print('your code is fail')

def get_skin_url(self, Id, folder):

"""

:param Id: 英雄ID,用于拼接url

:param folder: 以英雄名称命名的文件夹

:return:

"""

url = self.skinUrl.format(Id)

res = requests.get(url, headers=self.headers)

if res.status_code == 200:

data = json.loads(res.text)

for item in data['skins']:

url = item['mainImg']

name = item['name'].replace('/', '')

self.download_picture(url, name, folder)

else:

print('your code is fail')

def download_picture(self, url, name, folder):

"""

:param url: 皮肤地址

:param name: 皮肤名称

:param folder: 文件夹

:return:

"""

# 判断如果文件夹不存在则创建

if not os.path.exists(folder):

os.makedirs(folder)

# 判断url不为空和 图片不存在本地则下载(主要用于断点重连)

if not url == '' and not os.path.exists('%s/%s.jpg' % (folder, name)):

time.sleep(1)

res = requests.get(url, headers=self.headers)

with open('%s/%s.jpg' % (folder, name), 'wb') as f:

f.write(res.content)

print('%s.jpg' % name, '下载成功')

f.close()

def main(self):

self.get_heroList()

if __name__ == '__main__':

spider = YingXLMSpider()

spider.main()

来看看成果:

本篇文章很水,但是总体思路是正确的。建议各位通过复制黏贴代码去执行一番,有任何疑问请先自己动手解决,尽信书则不如无书

实在解决不了可以一起交流哟。

最后来总结一下本章的内容:

介绍了英雄联盟网站全英雄皮肤的爬虫思路

代码展示

感谢你的耐心观看,点关注,不迷路。

为方便菜鸡互啄,欢迎加入QQ群组织:648696280

下一篇文章,名为 《Python爬虫从入门到放弃 09 | Python爬虫实战–下载某音乐网–待定》。

python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_Python爬虫从入门到放弃 08 | Python爬虫实战--下载英雄联盟全英雄皮肤-Go语言中文社区...

如果觉得《python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_Python爬虫从入门到放弃 08 | Pyth》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。