Python爬取lol英雄联盟全阵容皮肤
1、结果展示
将每一个英雄保存一个文件夹下,把他所有的皮肤保存在他对应的文件夹下(自动生成的你运行爬虫就好了)
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
QQ群:961562169
2、代码解释
2.1用到第三方的模块
有些自带,有些需要你自己安装,pip install 模块名 就好了,如果有问题可以看我的第三方库导入大全那篇文章,有详细解释
import requests # 请求数据import os # 操作系统模块,用于创建文件夹
import jsonpath # 用于提取json类型的数据
import re # 正则表达式模块,用于获取皮肤名称
import time # 时间模块,防止爬的太快被封id
import random # 随机数模块,配合time使用
2.2请求头以及主页面js地址
user-agent:故名思意,用户代理,你设置了这个相当于把爬虫程序伪装成浏览器,如果不设置,服务器就会发现你是爬虫,这是最基本的反爬手段之一
hero_list_url:这是通过分析lol官网页面从中提取hero_id的url,如果想学页面分析可以留言我在写一篇分析页面的文章,这个主要教如何爬取
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"}
hero_list_url
= "https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js"
2.3获得详情页面的函数
写一个获得hero_id的函数找到每一个英雄的详情url为下载做准备,这里我用了列表推导式作为返回值将所有英雄的详情url返回出来方便下载函数调用
def get_id(url):response
= requests.get(url, headers=headers).json()hero_Id
= jsonpath.jsonpath(response, "$..heroId")time.sleep(random.randint(
1, 3))base_url
= "http://game.gtimg.cn/images/lol/act/img/js/hero/{}.js"return [base_url.format(every_id) for every_id in hero_Id]
2.4定义函数一个提取及下载数据
我直接再代码中进行解释
def get_skin(li1):for url in li1: # 遍历列表推导式response = requests.get(url, headers=headers)
result = response.json()["skins"] # 得到关于皮肤的所有信息
skin_name = [] # 设置空列表用来存储提取到的皮肤名
skin_url = [] # 设置空列表用来存储提取到的皮肤下载地址
time.sleep(random.randint(1, 3)) # 随机休眠1到3秒防止被封
for skin_json in result:
skin_name.append(skin_json["name"]) # 将英雄名保存到上面的空列表之中
skin_url.append(skin_json["mainImg"]) # 将英雄下载地址保存到上面的空列表之中
hero_folder = "allhero/" + response.json()["hero"]["name"] + response.json()["hero"]["title"]
#设置保存的路径
ifnot os.path.exists(hero_folder):
os.mkdir(hero_folder)
# 判断路径是否存在不存在就创建一个
for i in range(len(skin_url)):
ifnot skin_url[i]=="":
image_path = hero_folder +"/" + re.findall("w+",skin_name[i])[0] + ".png"# 具体设置图片的下载路径以及名称和格式
with open(image_path,"wb")as file:
print("正在下载{}".format(skin_name[i])) # 打印下载进度
file.write(requests.get(skin_url[i],headers=headers).content) #下载图片
3、完整代码
如果遇到问题可以留言,我看到了就会解答,喜欢的话可以关注我呀,我基本每天都会更新有趣的东西
import requestsimport osimport jsonpathimport reimport timeimport randomheaders
= {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"}
def get_id(url):response
= requests.get(url, headers=headers).json()hero_Id
= jsonpath.jsonpath(response, "$..heroId")time.sleep(random.randint(
1, 3))base_url
= "http://game.gtimg.cn/images/lol/act/img/js/hero/{}.js"return [base_url.format(every_id) for every_id in hero_Id]
def get_skin(li1):
for url in li1:
response = requests.get(url, headers=headers)
result = response.json()["skins"]
skin_name = []
skin_url = []
time.sleep(random.randint(1, 3))
for skin_json in result:
skin_name.append(skin_json["name"])
skin_url.append(skin_json["mainImg"])
hero_folder = "allhero/" + response.json()["hero"]["name"] + response.json()["hero"]["title"]
ifnot os.path.exists(hero_folder):
os.mkdir(hero_folder)
for i in range(len(skin_url)):
ifnot skin_url[i] == "":
image_path = hero_folder + "/" + re.findall("w+", skin_name[i])[0] + ".png"
with open(image_path, "wb")as file:
print("正在下载{}".format(skin_name[i]))
file.write(requests.get(skin_url[i], headers=headers).content)
if__name__ == "__main__":
hero_list_url = "https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js"
li1 = get_id(hero_list_url)
get_skin(li1)
以上是 Python爬取lol英雄联盟全阵容皮肤 的全部内容, 来源链接: utcz.com/z/531111.html