您当前的位置: 首页 >  Python

嗨学编程

暂无认证

  • 1浏览

    0关注

    1405博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python爬取LOL英雄皮肤

嗨学编程 发布时间:2019-08-10 15:08:38 ,浏览量:1

一 实现分析
  1. 在官网上找到英雄皮肤的真实链接,查看多个后发现前缀相同,后面对应为英雄的ID和皮肤的ID,皮肤的ID从00开始顺序递增,而英雄ID跟网页中的顺序无关,需要找到英雄ID。
  2. 并没有在皮肤页面和英雄页面的元素中找到有关英雄ID的内容,所以想到有可能是通过js文件加载进来的。通过Chrome工具找到跟英雄ID有关的js文件网址。
  3. 通过js文件网址获得英雄ID。与图片真实网址进行拼接,得到所有英雄的所有皮肤的图片地址,保存到列表中。
  4. 设置图片保存的路径和文件名。
  5. 下载。
二 知识点与难点
  1. 通过re库来正则表达式的处理。
  2. 通过json将字符串转成字典类型。
  3. 图片地址和文件名称的拼接。
  4. 判断图片是否真实存在和下载。
三 代码
import requests 
import re 
import json 
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
def getLOLImages():
# 包含英雄名字和ID的js文件路径
js_url = "http://lol.qq.com/biz/hero/champion.js"
# 获取js文件内容
js_content = requests.get(js_url).text 
# 截取需要的内容 .*? 代表所有内容
req = '"keys":(.*?),"data"'
# 取到的是列表,真正想要的是列表中的第一个元素
js_want = re.findall(req, js_content)[0] 
# 转成字典形式
js_dict = json.loads(js_want) 
# 获取图片的真实URL,并保存到列表中
# http://ossweb-img.qq.com/images/lol/web201310/skin/big266000.jpg
pic_url_list = [] 
for hero_id in js_dict: 
for skin_id in range(20): 
skin_id = str(skin_id) 
if len(skin_id) == 1: 
num_str = '00' + skin_id 
elif len(skin_id) == 2: 
num_str = '0' + skin_id 
pic_url = "http://ossweb-img.qq.com/images/lol/web201310/skin/big" + hero_id + num_str +".jpg"
pic_url_list.append(pic_url) 
# 设置文件名称
path = "D://lol/"
path_file_list = [] 
for pic_name in js_dict.values(): 
for skin_id in range(20): 
skin_id = str(skin_id) 
if len(skin_id) == 1: 
num_str = '00' + skin_id 
elif len(skin_id) == 2: 
num_str = '0' + skin_id 
path_file = path + pic_name + num_str + ".jpg"
path_file_list.append(path_file) 
# 下载
n = 0
for dl_url in pic_url_list: 
# n += 1
res = requests.get(dl_url) 
if res.status_code == 200: 
print("正在下载{}".format(path_file_list[n])) 
with open(path_file_list[n], "wb") as f: 
f.write(res.content) 
n += 1
if __name__ == '__main__': 
getLOLImages() 
关注
打赏
1663681728
查看更多评论
立即登录/注册

微信扫码登录

0.0938s