首页 > 编程语言 >【小白必看】轻松获取王者荣耀英雄皮肤图片的Python爬虫程序

【小白必看】轻松获取王者荣耀英雄皮肤图片的Python爬虫程序

时间:2023-10-18 17:01:14浏览次数:47  
标签:hero Python resp 皮肤 爬虫 headers 英雄 小白必 requests

在这里插入图片描述

前言

当谈到王者荣耀游戏时,无法忽视的是其丰富多样的英雄皮肤。这些皮肤不仅为玩家提供了个性化的游戏体验,还展示了设计师们的创造力和努力。然而,要手动下载每个英雄的皮肤图片是一项枯燥且费时的任务。 幸运的是,我们可以利用编程的力量来自动化这一过程。本文将介绍如何使用Python编写一个简单的爬虫程序,通过访问英雄主页并解析HTML代码,来批量下载王者荣耀英雄的皮肤图片。

我们将使用requests模块发送HTTP请求,lxml库解析HTML代码,以及其他一些常用的Python模块和库。代码将从官方网站获取英雄列表数据,并遍历列表获取英雄的ID和中文名。然后,我们将访问每个英雄的主页,提取其中的皮肤名称,并根据名称构建皮肤图片的URL。最后,我们将使用requests模块下载图片,并保存到对应的英雄目录中。

这个爬虫程序不仅能够帮助玩家轻松获取王者荣耀英雄的所有皮肤图片,还可以为开发人员提供学习和研究的素材

请继续阅读本文,了解如何使用Python编写这个简单而有用的爬虫程序,并快速获取王者荣耀英雄的精美皮肤图片吧

项目运行效果图

在这里插入图片描述 在这里插入图片描述

导入模块和库

在这里插入图片描述

import requests
from lxml import etree
import os
from time import sleep

这部分代码导入了需要使用的模块和库。requests模块用于发送HTTP请求,lxml库用于解析HTML代码,os模块用于操作文件和目录,time模块中的sleep函数用于控制请求的间隔时间。

伪装请求头

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'}

这里设置了一个伪装的请求头,用于模拟浏览器访问。通过设置请求头,可以避免被服务器识别为爬虫而导致请求被拒绝。

获取英雄列表

hero_list_url = 'https://pvp.qq.com/web201605/js/herolist.json'
hero_list_resp = requests.get(hero_list_url, headers=headers)

发送GET请求获取英雄列表的JSON数据。requests.get()函数用于发送HTTP请求,并返回一个包含服务器响应的Response对象。

遍历英雄列表

for h in hero_list_resp.json():
    ename = h.get('ename')
    cname = h.get('cname')

遍历英雄列表,获取每个英雄的ename(英雄ID)和cname(中文名)。hero_list_resp.json()将服务器响应的JSON数据转换为Python对象,这里是一个包含多个英雄信息字典的列表。

创建英雄目录

if not os.path.exists(cname):
    os.makedirs(cname)

如果英雄目录不存在,则创建英雄目录。os.path.exists()函数用于检查路径是否存在,os.makedirs()函数用于递归创建目录。

访问英雄主页并解析HTML代码

hero_info_url = f'https://pvp.qq.com/web201605/herodetail/{ename}.shtml'
hero_info_resp = requests.get(hero_info_url, headers=headers)
hero_info_resp.encoding = 'gbk'
e = etree.HTML(hero_info_resp.text)

构建英雄主页的URL,并发送GET请求获取页面内容。通过在URL中插入英雄的ename,可以访问到每个英雄的详细信息页面。设置encodinggbk,以正确解析中文字符。使用etree.HTML()函数将页面内容转换为可解析的HTML对象。

获取皮肤名称

names = e.xpath('//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0]
names = [name[0:name.index('&')] for name in names.split('|')]

使用XPath表达式提取HTML代码中的皮肤名称。这里的XPath表达式定位到ul节点的class属性为pic-pf-list pic-pf-list3的元素,然后提取其中的data-imgname属性值。返回的是一个字符串,包含了多个皮肤名称,用竖线分隔。通过切片和分割操作,将字符串处理成一个包含所有皮肤名称的列表。

下载皮肤图片

for i, n in enumerate(names):
    resp = requests.get(f'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{i+1}.jpg', headers=headers)
    with open(f'{cname}/{n}.jpg', 'wb') as f:
        f.write(resp.content)
    print(f'已下载:{n} 的皮肤')
    sleep(1)

遍历皮肤名称列表,构建皮肤图片的URL并发送GET请求获取图片内容。根据皮肤的URL模式,使用英雄的ename和皮肤的序号构建具体的URL。使用requests.get()函数发送请求,并返回一个包含服务器响应的Response对象。使用open()函数创建一个文件对象,以二进制写入模式打开文件,将图片内容写入该文件中,以保存皮肤图片。最后输出已下载皮肤的信息,并使用sleep(1)函数暂停1秒,控制请求的间隔时间,避免对服务器造成过大的负载。

完整代码

# 发送请求的模块 pip install requests
import requests
# 解析html代码的工具 lxml    pip install lxml
from lxml import etree 
import os
from time import sleep

# 伪装自己
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'}

# 获取英雄列表的URL
hero_list_url = 'https://pvp.qq.com/web201605/js/herolist.json'
# 发送HTTP请求获取英雄列表数据
hero_list_resp = requests.get(hero_list_url,headers=headers)

# 遍历英雄列表数据
for h in hero_list_resp.json():
   # 获取英雄的ID和中文名
   ename = h.get('ename')
   cname = h.get('cname')
   # 如果英雄目录不存在,则创建
   if not os.path.exists(cname):
       os.makedirs(cname)
       
   # 访问英雄主页
   hero_info_url = f'https://pvp.qq.com/web201605/herodetail/{ename}.shtml'
   hero_info_resp = requests.get(hero_info_url,headers=headers)
   hero_info_resp.encoding='gbk'
   e = etree.HTML(hero_info_resp.text)
   
   # 提取皮肤名称
   names = e.xpath('//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0]
   names = [name[0:name.index('&')] for name in names.split('|')]
   
   # 遍历每个皮肤名称
   for i,n in enumerate(names):
       # 构建皮肤图片的URL
       resp = requests.get(f'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{i+1}.jpg',headers=headers)
       
       # 保存皮肤图片
       with open(f'{cname}/{n}.jpg','wb') as f:
           f.write(resp.content)
       
       # 打印已下载的皮肤信息
       print(f'已下载:{n} 的皮肤')
       
       # 等待1秒,避免请求频率过快
       sleep(1)

总结

本文介绍了如何使用Python编写一个简单的爬虫程序,来批量下载王者荣耀英雄的皮肤图片。通过访问英雄主页并解析HTML代码,我们可以获取到每个英雄的皮肤名称,并根据名称构建皮肤图片的URL。然后使用Python的requests模块发送HTTP请求,并将下载得到的图片保存到对应的英雄目录中。

这个爬虫程序不仅可以帮助玩家轻松获取王者荣耀英雄的所有皮肤图片,还为开发人员提供了学习和研究的素材。通过阅读本文,读者可以了解到如何使用requests模块发送HTTP请求、如何使用lxml库解析HTML代码,以及一些常用的Python模块和库的使用方法。

在实现过程中,我们还介绍了如何伪装请求头,避免被服务器识别为爬虫。并且,为了控制请求的间隔时间,我们使用了time模块的sleep函数。

通过阅读本文,读者可以学到许多有用的爬虫技巧和Python编程技巧,同时也可以获得更好的游戏体验和更多的创作灵感。希望本文对读者有所帮助,能够在王者荣耀的世界中畅游愉快!

标签:hero,Python,resp,皮肤,爬虫,headers,英雄,小白必,requests
From: https://blog.51cto.com/u_14522592/7913898

相关文章

  • 【Python&RS】基于GDAL栅格数据/图片位深度(bit)转换
    ​    最近在用OpenCv库处理图片时发现cv库无法读取64位的tif影像,所有想通过Python将64位的图片转换成8位的。今天就跟大家分享一下如何利用Python的GDAL库,实现栅格数据/图片的位深度转换。        在数字图像处理中,我们常常会听到不同的位数术语,比如64位、16......
  • 【小白必看】Python爬虫数据处理与可视化
    前言本文分析了一段Python代码,主要功能是从网页中提取数据并进行数据处理与可视化。代码通过发送HTTP请求获取网页内容,使用XPath解析网页内容,并提取所需数据。然后使用pandas库构建数据结构,对数据进行统计与分组,并使用matplotlib库进行数据可视化。最后,对数据进行筛选、排序和保......
  • 【小白必看】使用Python批量下载英雄联盟皮肤图片的技术实现
    前言英雄联盟是一款备受喜爱的团队对战游戏,游戏中每位英雄都有各种精美的皮肤供玩家选择。本文将介绍一个使用Python编写的英雄联盟皮肤下载器,可以快速获取所有英雄的皮肤图片,让您更方便地欣赏和收藏这些皮肤。运行效果截图导入必要的模块和库importrequests#pipi......
  • 【小白必看】使用Python爬取喜马拉雅音频并保存的示例代码
    前言本文介绍了如何使用Python中的requests库来获取音频文件并保存到本地。在这个例子中,我们使用了喜马拉雅平台上的一个API接口来获取音频ID和名称,并使用这些信息构造音频地址,然后通过发送HTTP请求将音频内容下载保存到本地。运行效果截图导入requests库importrequests......
  • 【小白必看】Python爬取NBA球员数据示例
    前言使用Python爬取NBA球员数据的示例代码。通过发送HTTP请求,解析HTML页面,然后提取出需要的排名、姓名、球队和得分信息,并将结果保存到文件中。导入需要的库和模块importrequestsfromlxmlimportetree使用requests库发送HTTP请求。使用lxml库进行HTML解析。......
  • 【小白必看】Python词云生成器详细解析及代码实现
    前言本文介绍了如何使用Python编写代码来生成词云图。在生成词云图之前,我们需要导入一些必需的库,包括numpy、wordcloud、PIL、matplotlib.pyplot和openpyxl。其中,numpy用于数据处理,wordcloud用于生成词云,PIL用于图像处理,matplotlib.pyplot用于在笔记本中显示图片,openpyxl用于读......
  • 【小白必看】Python爬虫实战之批量下载女神图片并保存到本地
    前言爬取网络上的图片是一种常见的需求,它可以帮助我们批量下载大量图片并进行后续处理。本文将介绍如何使用Python编写一个简单的爬虫,从指定网页中获取女神图片,并保存到本地。运行结果部分图片1.引入所需库首先需要导入两个库:requests用于发送网络请求,lxml用于解析......
  • 【小白必看】Python图片合成示例之使用PIL库实现多张图片按行列合成
    前言本文介绍了一个用于图片合成的Python代码示例。该代码使用了PIL库来处理图片文件,并通过嵌套循环将多张图片按照指定的行数和列数进行合成。最终生成的合成图片保存在本地。效果图1.导入必要的库fromPILimportImageimportos这段代码导入了PIL库中的Image模块,......
  • 【玩转python系列】【小白必看】使用Python爬虫技术获取代理IP并保存到文件中
    前言这篇文章介绍了如何使用Python爬虫技术获取代理IP并保存到文件中。通过使用第三方库requests发送HTTP请求,并使用lxml库解析HTML,我们可以从多个网页上获取IP、Port和地址信息。本文将逐步解析代码的每一部分,帮助读者更好地理解爬虫的工作原理。导入依赖库importrequ......
  • 【玩转Python系列】【小白必看】使用Python爬取双色球历史数据并可视化分析
    前言本文介绍了如何使用Python编程语言获取双色球历史数据,并使用数据可视化工具Matplotlib绘制了红球数量的折线图。通过对双色球历史数据的分析,我们可以更好地了解双色球的开奖规律和趋势。导入库importrequestsfromlxmlimportetreeimportcsvimportmatplotlib.pypl......