前言

  • 抓取的重点是找到每个英雄对应的id编号

分析

  • 先观察单个英雄的单张皮肤图片的url(如下图马超的两张皮肤图片所示)

  • 马超一共有三个皮肤(经典算第一张), 每张皮肤的url分别是
    第一张:
    https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/518/518-bigskin-1.jpg
    第二张:
    https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/518/518-bigskin-2.jpg
    第三张:
    https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/518/518-bigskin-3.jpg

  • 从三个url中不难发现,url只有后面的数字不同(1.jpg、2.jpg、3.jpg)

  • 最大为3,因为这里用的例子是马超(他只有三个皮肤3对应的是最新的皮肤,以此类推)

  • 假设一个英雄皮肤图片有n张,那么此皮肤图片的url结尾则是 1至n .jpg

  • n就是皮肤编号

  • 下面再来看看其他英雄(这次我们找的是猴子

  • 猴子一共有7个图片

  • 看一下大圣娶亲的url,结尾是7.jpg

  • 与之前的马超规律一样

  • 但有一点不同(都以第一张图片为例,看我加粗的518跟167)

  • 马超的第一张url
    https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/518/518-bigskin-1.jpg

  • 猴子的第一张url
    https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/167/167-bigskin-1.jpg

  • 马超对应的是 518

  • 猴子对应的是 167

  • 通过以上分析可以推断出每个英雄都有对应的id编号id编号皮肤编号结合就可以构成单张的皮肤图片url

接下来找英雄对应的id编号

  • 访问王者荣耀官网
  • 检查元素
  • 全局搜索


    所有英雄对应的id编号的url链接(也包含艾琳)
    请求这个url然后解析响应数据,就可以得到所有的英雄对应的id编号

代码

import requests
import re
import json
import os
import time# 获取当前时间戳,用于计算爬虫爬取完毕消耗了多少时间
now = lambda: time.time()# 请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36","Cookie": "pgv_pvid=120529985; pgv_pvi=8147644416; RK=iSx1Z7fSHW; ptcz=d094d0d03f513f6762a4c18a13ddae168782ec153f43b16b604723b27069d0a7; luin=o0894028891; lskey=000100008bc32936da345e2a5268733bf022b5be1613bd2600c10ad315c7559ff138e170f30e0dcd6a325a38; tvfe_boss_uuid=8f47030b9d8237f7; o_cookie=894028891; LW_sid=s116T01788a5f6T2U8I0j4F1K8; LW_uid=Z1q620M7a8E5G6b2m8p0R4U280; eas_sid=m1j6R057x88566P2Z8k074T2N7; eas_entry=https%3A%2F%2Fcn.bing.com%2F; pgv_si=s8425377792; PTTuserFirstTime=1607817600000; isHostDate=18609; isOsSysDate=18609; PTTosSysFirstTime=1607817600000; isOsDate=18609; PTTosFirstTime=1607817600000; pgv_info=ssid=s5339727114; ts_refer=cn.bing.com/; ts_uid=120529985; weekloop=0-0-0-51; ieg_ingame_userid=Qh3nEjEJwxHvg8utb4rT2AJKkM0fsWng; pvpqqcomrouteLine=index_herolist_herolist_herodetail_herodetail_herodetail_herodetail; ts_last=pvp.qq.com/web201605/herolist.shtml; PTTDate=1607856398243","referer": "https://pvp.qq.com/"
}# 解析函数,返回文本或者二进制或者None
def parse_url(url, get_b=False):try:response = requests.get(url, headers=headers)response.encoding = "gbk"assert response.status_code == 200if get_b == True:return response.contentelse:return response.textexcept:print("status_code != 200(from parse_url)")return None# 处理单个英雄
def parse_hero_detail(id, name):# 保存所有皮肤图片的本地路径path = f"./英雄皮肤/{name}"if not os.path.exists(path):os.makedirs(path, exist_ok=True)# 因为不确定每个英雄有多少个皮肤,所以假设单个英雄一共请求10张皮肤,这样就不会出现皮肤缺少的情况for num in range(1, 11):# 单个英雄皮肤图片的url链接api_url = f"https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{id}/{id}-bigskin-{num}.jpg"# 如果返回None,则说明状态码不是200,即没有这个请求的皮肤b_data = parse_url(api_url, get_b=True)if b_data == None:print(f"{name} 一共有{num - 1}个皮肤")print("--------------------------------------------------")# 没有新的皮肤了,立即退出循环breakimg_path = f"{path}/demo{num}.jpg"if not os.path.exists(img_path):try:download_img(img_path, b_data)except:returnprint(f"{name} 第{num}张皮肤图片 下载完毕")# 下载图片
def download_img(path, b_data):with open(path, "wb") as f:f.write(b_data)def main():# 含有每个英雄对应的id、英雄名称的urlapi_url = "https://game.gtimg.cn/images/yxzj/web201706/js/heroid.js"text = parse_url(api_url)search_result = re.search('var module_exports = ({.*?})', text, re.S)hero_info_str = search_result.group(1)hero_info_str = re.sub("'", '"', hero_info_str)# 包含 所有英雄以及各自对应的id 的字典hero_info_dict = json.loads(hero_info_str)for hero in hero_info_dict:name, id = hero_info_dict[hero], heroprint(name, id)parse_hero_detail(id, name)if __name__ == '__main__':start = now()                       # 记录起始时间main()                              # 主函数print(f"耗时: {now() - start}")     # 计算爬虫执行完毕消耗的时间

运行演示

爬虫运行完毕结果展示(部分)

补充

  • 艾琳是空的,你们懂的

爬虫 -- 王者荣耀爬虫,爬取每个英雄的皮肤图片相关推荐

  1. 爬虫实战5:爬取全部穿越火线武器的图片以武器名称命名保存到本地文件

    申明:资料来源于网络及书本,通过理解.实践.整理成学习笔记. 文章目录 穿越火线官网 完整代码 运行结果 穿越火线官网 完整代码 import requests# 循环33次,官网武器库展示有33页 ...

  2. Python程序员自制爬虫小程序, 瞬间爬取十几万美女图片

    最近对python爬虫感兴趣,于是也依葫芦画瓢试着用爬虫爬取之前喜欢的网站上的美女图片,其中每一套图都是一张一个页面,存一套图如果是手动得点翻几十个页面,但现在用爬虫的话,就很方便了,只需输入套图的i ...

  3. python爬虫利用Scrapy框架爬取汽车之家奔驰图片--实战

    先看一下利用scrapy框架爬取汽车之家奔驰A级的效果图 1)进入cmd命令模式下,进入想要存取爬虫代码的文件,我这里是进入e盘下的python_spider文件夹内 C:\Users\15538&g ...

  4. python爬虫(2)爬取游民星空网的图片

    python 入门级别爬虫 目的:爬取游民星空的图片 前两天在游民星空看到几张美图,然后就想把它保存下来,但是一个一个的右键保存,太不爽了,身为一个程序源,一个码农,怎么能这么低级的保存呢? 然后最近 ...

  5. python壁纸数据抓取_python爬虫多线程实战:爬取美桌1080p壁纸图片

    本人纯手工码字哦,请耐心看完,有信心可以带你完整学会这个实战案例 一.需求分析: 1.下载 http://www.win4000.com/wallpaper.html 下指定分类 指定尺寸 的图片 2 ...

  6. 【python爬虫实战】批量爬取站长之家的图片

    概述: 站长之家的图片爬取 使用BeautifulSoup解析html 通过浏览器的形式来爬取,爬取成功后以二进制保存,保存的时候根据每一页按页存放每一页的图片 第一页:http://sc.china ...

  7. Python:王者荣耀壁纸爬取

    分析流程 目标网站 http://shp.qpic.cn/ishow/2735010212/1577940093_84828260_16596_sProdImgNo_2.jpg/0 1024768壁纸 ...

  8. python爬虫王者荣耀高清皮肤大图背景故事通用爬虫

    wzry-spider python通用爬虫-通用爬虫爬取静态网页,面向小白 基本上纯python语法切片索引,少用到第三方爬虫网络库 这是一只小巧方便,强大的爬虫,由python编写 主要实现了: ...

  9. 爬虫实战6:爬取英雄联盟官网五个位置的综合排行榜保存到excel

    申明:资料来源于网络及书本,通过理解.实践.整理成学习笔记. 文章目录 英雄联盟官网 获取一个位置的综合排行榜所有数据(上单为例) 获取所有位置的综合排行榜所有数据 英雄联盟官网 获取一个位置的综合排 ...

最新文章

  1. 存储过程——数据的分页
  2. 《TensorFlow技术解析与实战》——导读
  3. 神器!微软发布 Python 的 JIT 编译器:Pyjion!
  4. python实现蜘蛛功能批量下载手机壁纸
  5. 【模板】一维树状数组
  6. JDK 12,合并的收集器和命名的挑战
  7. python内核死亡的原因_Python的内核由于DLL而死亡
  8. 人工智能秘史(一):会下棋的土耳其机器人
  9. Oracle分析函数简析
  10. 470.用Rand7()实现Rand10()
  11. UG NX10.0软件安装教程
  12. 2022年聚合工艺考试试卷及聚合工艺考试总结
  13. linux免费日志分析工具,分享10个优秀的日志分析工具
  14. 欧几里得算法及其证明
  15. Android:JNI 与 NDK到底是什么?(含实例教学)
  16. 东北大学计算机学院教授,东北大学之计算机系
  17. java计算机毕业设计校园二手书交易系统源码+系统+数据库+lw文档+mybatis+运行部署
  18. java将占位符替换成指定字符串的函数
  19. 开始暂停按钮实现图片随机切换并显示在指定图像框内
  20. 以太网供电(POE)的关键技术解析

热门文章

  1. (大集合)AI工具和用法汇总—集合的集合
  2. PPT双屏,设置主屏
  3. 真正的好老板,都是高层次的“给予者”
  4. 2019下半年阿里面试失败总结
  5. 查询病案首页最后保存时间
  6. 在visio中不借助公式编辑器在字母上方打波浪线
  7. 四旋翼无人机动力学模型及控制
  8. YUVPlayer: 基于Android平台的YUV视频原始数据播放器
  9. Ubuntu系统 不使用snap安装firefox,使用firefox官网下载的安装包安装firefox
  10. Facebook养号的账号区别?