Python实战---王者荣耀皮肤爬虫

news/2024/11/19 23:19:09/

文章目录

    • 方法1
    • 方法2

作为王者荣耀的老玩家,今天教大家如何用python爬虫获取王者荣耀皮肤
在这里插入图片描述
本文将介绍两种王者荣耀皮肤的爬取方法,一种比较简单的,一种复杂的方法供大家学习。
首先先进去王者荣耀官方网站: 王者荣耀
进入开发者工具找到英雄皮肤所在位置,图中 herolist.json就是我们需要找的英雄列表,包括英雄编号、英雄名称、影响类型、皮肤等信息,复制 url:http://pvp.qq.com/web201605/js/herolist.json路径
在这里插入图片描述

方法1

见注释

# 导入所需要的模块
import urllib.request
import json
import os
# 获取响应头文件  
response = urllib.request.urlopen("http://pvp.qq.com/web201605/js/herolist.json")
# 读取英雄列表,并存入hero_json中
hero_json = json.loads(response.read())
hero_num = len(hero_json)
# 保存路径
save_dir = 'Dheroskin\\'
# 检查路劲是否存在,不存在则创建路径
if not os.path.exists(save_dir):os.mkdir(save_dir)for i in range(hero_num):# 获取英雄皮肤列表skin_names = hero_json[i]['skin_name'].split('|')for cnt in range(len(skin_names)):save_file_name = save_dir + str(hero_json[i]['ename']) + '-' +hero_json[i]['cname']+ '-' +skin_names[cnt] + '.jpg'skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'+str(hero_json[i]['ename'])+ '/' +str(hero_json[i]['ename'])+'-bigskin-' + str(cnt+1) +'.jpg'print(skin_url)
# 检查图片文件是否存在,如果存在则跳过下载if not os.path.exists(save_file_name):urllib.request.urlretrieve(skin_url, save_file_name)

效果展示如下
在这里插入图片描述

方法2

见注释

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}")     # 计算爬虫执行完毕消耗的时间

在这里插入图片描述


http://www.ppmy.cn/news/303550.html

相关文章

Python小游戏之王者荣耀

欢迎来到王者荣耀… 闲来无事,写点代码复习复习! 游戏内容涉及: 1.随机数生成 2.相关模块用法 3.0 1 用法 4.条件判断 5.循环 6.列表 7.单词的记忆…mmp(你四级过了吗…) import random print(**40) print(\t欢迎来到王者荣耀) print(**40) …

王者荣耀皮肤爬虫

爬取王者荣耀的高清皮肤,https://pvp.qq.com/web201605/herolist.shtml是英雄官网的网址 我们需要对其源码进行保存,并且使用正则表达式获取主要的信息内容(英雄id以及皮肤数量),并计算出总量。 然后问用户想要把代码…

王者荣耀游戏英文及翻译

王者荣耀游戏英文及翻译 第一滴血 First blood 双杀 Double kill 三杀 Triple kill 四杀 Quadra kill 五杀 Penta kill 连续击杀3次 大杀特杀 Killing spree 连续击杀4次 杀人如麻 Rampage 连续击杀5次 无人可挡 Unstoppable 连续击杀6次 横扫千军 Godlike 连续…

抖音里王者荣耀游戏视频搞怪的配音怎么做

抖音里王者荣耀游戏视频搞怪的配音怎么做? 2020-10-13 17:06 来源:二喵的鱼 原标题:抖音里王者荣耀游戏视频搞怪的配音怎么做? 盘点抖音视频爆品类型,不知不觉中搞笑的游戏视频竟已冲出了一条大道,正所谓美女千篇一…

网络爬虫之王者荣耀会

网络爬虫之王者荣耀会 因为需要,所以创造。 ——某开源社区 喜欢玩手游的朋友们应该都玩过某讯的王者农药,鄙人作为一个手游渣渣也玩过几次,常用英雄为亚瑟、安琪拉、鲁班…。玩几局就被其中每个英雄唯美的UI设计所吸引(但是最常玩…

Python爬虫之一:十几行代码下载王者荣耀所有皮肤

起因:前两天在公众号上看到一篇文章内容就是爬取王者荣耀的皮肤,但是内容太大概了,如果跟着他做肯定做不出来,所以我打算自己做。 之前接触过爬虫还是几年前爬取豆瓣电台的歌曲,那时候用的C,json解析还要用…

王者荣耀全皮肤

import os import timeimport requestsheroUrl https://pvp.qq.com/web201605/js/herolist.json headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36}# 创建目录文件 def makedir(x…

python爬取王者荣耀所有皮肤

文章目录 一、目标二、环境三、分析网页和url四、发现问题五、代码代码1代码2json文件夹代码:温馨提示 效果 一、目标 爬取王者荣耀英雄的所有的皮肤保存到文件夹 二、环境 用到的爬虫的requests 三、分析网页和url 1.英雄库的url:https://pvp.qq.…