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() 
 

 


转载于:https://www.cnblogs.com/banshaohuan/p/9368045.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值