• Python爬取LOL英雄皮肤


    Python爬取LOL英雄皮肤

    一 实现分析

    1. 在官网上找到英雄皮肤的真实链接,查看多个后发现前缀相同,后面对应为英雄的ID和皮肤的ID,皮肤的ID从00开始顺序递增,而英雄ID跟网页中的顺序无关,需要找到英雄ID。
    2. 并没有在皮肤页面和英雄页面的元素中找到有关英雄ID的内容,所以想到有可能是通过js文件加载进来的。通过Chrome工具找到跟英雄ID有关的js文件网址。
    3. 通过js文件网址获得英雄ID。与图片真实网址进行拼接,得到所有英雄的所有皮肤的图片地址,保存到列表中。
    4. 设置图片保存的路径和文件名。
    5. 下载。

    二 知识点与难点

    1. 通过re库来正则表达式的处理。
    2. 通过json将字符串转成字典类型。
    3. 图片地址和文件名称的拼接。
    4. 判断图片是否真实存在和下载。

    三 代码

    1. '''
    2. 1. 找到图片路径,获取所有图片真实URL
    3. 2. 设置文件名
    4. 3. 下载
    5. '''
    6. import requests 
    7. import re 
    8. import json 
    9. def getLOLImages():
    10. # 包含英雄名字和ID的js文件路径
    11. js_url = "http://lol.qq.com/biz/hero/champion.js"
    12. # 获取js文件内容
    13. js_content = requests.get(js_url).text 
    14. # 截取需要的内容 .*? 代表所有内容
    15. req = '"keys":(.*?),"data"'
    16. # 取到的是列表,真正想要的是列表中的第一个元素
    17. js_want = re.findall(req, js_content)[0
    18. # 转成字典形式
    19. js_dict = json.loads(js_want) 
    20. # 获取图片的真实URL,并保存到列表中
    21. # http://ossweb-img.qq.com/images/lol/web201310/skin/big266000.jpg
    22. pic_url_list = [] 
    23. for hero_id in js_dict: 
    24. for skin_id in range(20): 
    25. skin_id = str(skin_id) 
    26. if len(skin_id) == 1
    27. num_str = '00' + skin_id 
    28. elif len(skin_id) == 2
    29. num_str = '0' + skin_id 
    30. pic_url = "http://ossweb-img.qq.com/images/lol/web201310/skin/big" + hero_id + num_str +".jpg"
    31. pic_url_list.append(pic_url) 
    32. # 设置文件名称
    33. path = "D://lol/"
    34. path_file_list = [] 
    35. for pic_name in js_dict.values(): 
    36. for skin_id in range(20): 
    37. skin_id = str(skin_id) 
    38. if len(skin_id) == 1
    39. num_str = '00' + skin_id 
    40. elif len(skin_id) == 2
    41. num_str = '0' + skin_id 
    42. path_file = path + pic_name + num_str + ".jpg"
    43. path_file_list.append(path_file) 
    44. # 下载
    45. n = 0
    46. for dl_url in pic_url_list: 
    47. # n += 1
    48. res = requests.get(dl_url) 
    49. if res.status_code == 200
    50. print("正在下载{}".format(path_file_list[n])) 
    51. with open(path_file_list[n], "wb") as f: 
    52. f.write(res.content) 
    53. n += 1
    54. if __name__ == '__main__'
    55. getLOLImages() 
     
  • 相关阅读:
    关于html元素Css样式设置的一点心得(特别是与位置有关的,还有外边距、内边距有关的那些)
    【idea的一个安装细节】是不是使用idea不能连接网络了?
    html中a标签属性parent和self的举例说明
    关于jquery的each的操作;
    superagent中文文档
    mongoose 查询子文档的方法
    Object.prototype.toString.call()进行类型判断
    局部函数的直接引用与调用
    数据模型中某个字段是单选或者多选的定义方式;
    nodejs项目中的路由写法
  • 原文地址:https://www.cnblogs.com/banshaohuan/p/9368045.html
Copyright © 2020-2023  润新知