原标题:《王者荣耀》游戏皮肤用python免费“偷”

本文使用Python制作爬虫,来爬取《英雄联盟》《王者荣耀》《神之浩劫》等游戏官方网站的英雄皮肤图片。可以作为新手爬虫的练手实战案例!!

对于腾讯的这三款MOBA游戏,其中《王者荣耀》和《英雄联盟》大部分同学可能都不会陌生。对于MOBA游戏,总会让人感叹:不怕神一样的对手,就怕猪一样的队友。。。。。。当然自己也有一顿操作0:5的经历。。。。。。

在浏览这些游戏官方网站的时候发现英雄的皮肤很好看,例如这一张:

想拿来做电脑壁纸。于是就打开开发者工具找到了这张壁纸的地址下载下来。但是我还想要赵云的其他皮肤壁纸。。。。。。还想要其他英雄的所有皮肤壁纸。。。。。。还想要《英雄联盟》《神之浩劫》的皮肤壁纸。。。。。。这样就用到爬虫了!!

这里主要讲解《王者荣耀》的爬取方法,其他类似。

《王者荣耀》

所有英雄

首先进入所有英雄列表,你会看到下图:

在这个网页中包含了所有的英雄,头像及英雄名称。

单个英雄

点击其中一个英雄的头像,例如第一个“百里守约”,进去后如下图:

“百里守约”里面有两个皮肤图片(如右下角所示)。我们就是要抓取这样的图片(注意:不是右下角那两张小图,而是如上图所示中的大图)。在这个网页中查看“百里守约”的网址,可以看到网址是:https://pvp.qq.com/web201605/herodetail/196.shtml。其实网址中196.shtml以前的字符都是不变的,变化的只是196.shtml。那么196是什么呢?乍一看毫无意义,其实它是“百里守约”这个英雄所对应的数字(我也不知道为啥这样对应!!)。也就是说,要想爬取图片你就应该进入每个英雄皮肤图片所在的网址。就像上图所示的“百里守约”。而要爬取所有英雄的图片,就应该有所有单个英雄的网址。所有英雄的网址的关键就是每个英雄对应的数字。那么这些数字怎么找呢?

英雄数字

在所有英雄列表中,打开浏览器的开发者工具(F12),刷新,找到一个json格式的文件,如图所示:

这时就会看到所有英雄对应的数字了。在上图所示的Headers中可以找到该json文件对应的网址形式。将其导入Python,把这些数字提取出来,然后模拟出所有英雄的网址即可(网址的格式在上一小节中已经提过了)。

前面几个小节的代码如下(我的是Ubuntu(Linux)系统):

#爬取王者荣耀英雄图片#导入所需模块importrequestsimportreimportos#导入json文件(里面有所有英雄的名字及数字)url='http://pvp.qq.com/web201605/js/herolist.json'#英雄的名字jsonhead={'User-Agent':'换成你自己的head'}html=requests.get(url,headers=head)html=requests.get(url)html_json=html.json()#提取英雄名字和数字hero_name=list(map(lambdax:x['cname'],html_json))#名字hero_number=list(map(lambdax:x['ename'],html_json))#数字

下载图片

现在可以进入所有英雄的网址了,可以爬取网址下的图片了。进入一个英雄的网址,打开开发者工具,在NetWork下刷新并找到英雄的皮肤图片(记住是大图)。如图所示:

然后在Headers中查看该图片的网址。会发现皮肤图片是有规律的。我们可以用这样的方式来模拟图片网址:'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'+str(v)+'/'+str(v)+'-bigskin-'+str(u)+'.jpg',在该网址中只有str(v)与str(u)是改变的(str( )是Python中的一个函数),str(v)是英雄对应的数字,str(u)只是图片编号,例如第一个图片就是1,第二个就是2,第三个。。。。。。而一个英雄的皮肤应该不会超过12个(如果你不放心可以将这个值调到20等)。既然英雄皮肤的网址也有了,下面就是下载了!!

下载的代码如下(有些地址要换成你自己的):

defmain():#用于下载并保存图片ii=0forvinhero_number:os.mkdir("/home/wajuejiprince/图片/WZRY/"+hero_name[ii])#换成你自己的os.chdir("/home/wajuejiprince/图片/WZRY/"+hero_name[ii])#换成你自己的ii=ii+1foruinrange(12):onehero_links='http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'+str(v)+'/'+str(v)+'-bigskin-'+str(u)+'.jpg'im=requests.get(onehero_links)ifim.status_code==200:iv=re.split('-',onehero_links)open(iv[-1],'wb').write(im.content)

执行完上面的代码后只需要执行main函数就行了

main()

爬取下来的图片是这样,每个文件夹里面是该英雄对应的图片,如下图:

《英雄联盟》(美服)(两种方法)

这两种方法的区别就在于:第一种不用观察图片规律,直接提取图片网址;第二种和抓取《王者荣耀》类似,都是模拟图片地址。

第一种

这一种是在提取图片网址的时候直接使用正则表达式来匹配出图片网址。代码如下:

#导入模块importrequestsimportrefrombs4importBeautifulSoupimportos

得到英雄的名字:

url='http://ddragon.leagueoflegends.com/cdn/6.24.1/data/en_US/champion.json'#json里面含有所有英雄的名字defget_hero_name(url):head={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/59.0.3071.109 Chrome/59.0.3071.109 Safari/537.36'}html=requests.get(url,headers=head)heml_json=html.json()hero_name=heml_json['data'].keys()list_of_nameMax=list(hero_name)#此时的英雄名字的首字母是大写list_of_nameMin=[]#此时的名字就是小写了foriiinlist_of_nameMax:name=ii.lower()list_of_nameMin.append(name)returnlist_of_nameMin

定义下载一个英雄图片的函数:

defget_onehero_img(name):#下载一个英雄的所有皮肤图片url2='http://gameinfo.na.leagueoflegends.com/en/game-info/champions/'+name+'/'head={'User-Agent':'你自己的headers'}html=requests.get(url2,headers=head)contents=html.textsoup=BeautifulSoup(contents)hero_img=soup.findAll('img')reg=re.compile(r'"http://ddragon.leagueoflegends.com/cdn/img/.*?.jpg"',re.S)hero_img_links=re.findall(reg,str(hero_img))returnhero_img_links

下载保存图片(保存地址要改):

defmain():#用于下载并保存图片list_name=list_of_nameforiinlist_name:os.mkdir("/home/wajuejiprince/图片/LOL/"+i)os.chdir("/home/wajuejiprince/图片/LOL/"+i)ashe=get_onehero_img(i)forjinashe:im=re.sub('"','',j)ir=requests.get(im)ifir.status_code==200:ip=re.sub('"','',j)iu=re.split('/',im)open(iu[-1],'wb').write(ir.content)

执行:

if__name__=="__main__":list_of_name=get_hero_name(url)main()

第二种

import

requests

import

re

import

os

得到英雄名字:

url='http://ddragon.leagueoflegends.com/cdn/6.24.1/data/en_US/champion.json'#json里面含有所有英雄的名字defget_hero_nameMax(url):head={'User-Agent':'你自己的headers'}html=requests.get(url,headers=head)heml_json=html.json()hero_name=heml_json['data'].keys()list_of_nameMax=list(hero_name)#此时的英雄名字的首字母是大写returnlist_of_nameMax

下载图片(保存地址要改):

onehero_links=[]list_of_nameMax=get_hero_nameMax(url)defmain():#用于下载并保存图片forfninlist_of_nameMax:os.mkdir("/home/wajuejiprince/图片/LOL2/"+fn)os.chdir("/home/wajuejiprince/图片/LOL2/"+fn)forvinrange(20):onehero_links='http://ddragon.leagueoflegends.com/cdn/img/champion/splash/'+fn+'_'+str(v)+'.jpg'im=requests.get(onehero_links)ifim.status_code==200:iv=re.split('/',onehero_links)open(iv[-1],'wb').write(im.content)

执行:

main()

《神之浩劫》(美服)

import

requests

import

re

import

os

url

=

'https://www.smitegame.com/gods/'

head

=

{

'User-Agent'

:

'你的head'

}

html

=

requests

.

get

(

url

,

headers

=

head

)

reg

=

re

.

compile

(

r'href="(.*?)">

)

#返回的是文本不用re.S

hero_url

=

re

.

findall

(

reg

,

html

.

text

)

#得到所有英雄的网址

def

one_hero_picture

(

ul

):

html_hero

=

requests

.

get

(

ul

,

headers

=

head

)

if

html_hero

.

status_code

==

200

:

reg2

=

re

.

compile

(

r'"background-image:url((.*?))">'

,

re

.

S

)

items2

=

re

.

findall

(

reg2

,

html_hero

.

text

)

del

items2

[

0

]

return

items2

#每个英雄的名字

hero_name

=

list

(

map

(

lambda

x

:

re

.

split

(

'/'

,

x

)[

-

2

],

hero_url

))

def

main

():

#用于下载并保存图片

ii

=

0

for

v

in

hero_url

:

os

.

mkdir

(

"/home/wajuejiprince/图片/Smite/"

+

hero_name

[

ii

])

os

.

chdir

(

"/home/wajuejiprince/图片/Smite/"

+

hero_name

[

ii

])

ii

=

ii

+

1

one_hero

=

[]

one_hero

=

one_hero_picture

(

v

)

for

u

in

one_hero

:

im

=

requests

.

get

(

u

)

if

im

.

status_code

==

200

:

iv

=

re

.

split

(

'/'

,

u

)

open

(

iv

[

-

1

],

'wb'

)

.

write

(

im

.

content

)

main

()

对于《神之浩劫》的代码有些英雄在json文件中的名字还不是该英雄网址的名字,记得应该是孙悟空等,只需将hero_name中这些英雄的名称改对即可(我没有改,所以没有下全)。

最后--美图欣赏

蔡文姬:

狄仁杰:

贾克斯:

阿兹尔:

阿格尼:

嫦娥:

敖广:

声明:本爬虫仅供个人娱乐学习,请不要用于任何商业目的或违法行为!!返回搜狐,查看更多

责任编辑:

python玩王者荣耀皮肤_《王者荣耀》游戏皮肤用python免费“偷”相关推荐

  1. 张莉python 玩转数据答案_中国大学MOOC(慕课)用Python玩转数据答案大全

    中国大学MOOC(慕课)用Python玩转数据答案大全 更多相关问题 All the neighbors admire the family _______ the parents are treat ...

  2. 海洋分享皮肤_王者荣耀周年庆皮肤爆料,还有一款CP皮肤?

    本文原创首发于公众号​:电竞怪客 hello,大家好,这里是怪客君~ 王者荣耀四周年周年庆限定皮肤在几天前已经正式官宣,当听到新皮肤是梁祝主题的时候,原以为婉儿会扮演的是祝英台,没想到是反串的梁山伯. ...

  3. python目前版本强势英雄_王者荣耀目前版本什么英雄强势?

    谢邀. 在我之前写天梯排行时,总有不少人质疑我的段位和实力,可能是我的排行跟他们理解有所出入,欢迎各位在评论区理性讨论. 在写这篇天梯排行前,我先放一下我的段位,证明一下我并不是瞎写乱写的. 以下是我 ...

  4. python玩转大数据_【小旭学长】大数据博士教你用python玩转时空大数据

    好消息!好消息!手把手教你用python玩大数据 小旭学长的python大数据教程完结撒花,共26P录制完毕,总时长4小时.每10分钟的视频的录制加剪辑时间加起来都要两小时以上,讲得很细但是节奏也很快 ...

  5. python玩加件大师_如何聘请Python开发人员并确定真正的大师

    python玩加件大师 "The joy of coding is in seeing a short, concise, readable, and small amount of cle ...

  6. python创建类统计属性_轻松创建统计数据的Python包

    python创建类统计属性 介绍 (Introduction) Sometimes you may need a distribution figure for your slide or class ...

  7. python就业需要的技能_教你如何快速掌握Python就业技能

    -人生苦短,为什么要学Python? 简单易学 应用广泛 大厂青睐 (油管大神评选的2020最值得学就业语言-Python) 因为以上的种种理由,无论是国外还是国内, Python都荣登2020最值得 ...

  8. python怎么复数乘方开方_运维必须掌握的 Python 宝典:值得每天复习一遍

    前言 本文旨在更好地总结 Python 基础知识,力求简明扼要,以供实战演练时能够快速查询遗忘的知识点. 学一门语言贵在坚持用它,不用就淡忘了,而记录下一篇文章也有助于日后快速回忆.全文分为两大部分, ...

  9. python人生的不同阶段_从入门到入土的Python自学教程,用改变你的人生轨迹

    Python在近几年越来越受追捧,很多童鞋或者职场小伙伴想要提升技能-学习Python. 这是非常好的事情,但问题在于很多人不知道学Python做什么,所以什么零碎细末.艰难晦涩.长篇大论的都去看,很 ...

  10. 学会python怎么赚钱 贴吧_我月薪5000,靠Python搞副业月入3万

    被压垮的打工人,你还好吗? 房贷车贷,上老下小,日常开销, 但你的收入有多少??? 所以你不敢生病,甚至不敢回家! 就为了每个月那么点死工资,还得天天加班. 然而忙忙忙,却变成了"穷忙族&q ...

最新文章

  1. 在kindle fire 上安装CM10 Jelly Bean ROM
  2. ActionResult的其它返回值
  3. @scheduled只执行一次_SpringBoot第四篇:定时任务@Scheduled
  4. C语言逻辑运算符 - C语言零基础入门教程
  5. Java 画精美图形
  6. Atitit gis之道 attilax著
  7. 阿里4万亿市值是怎样炼成的?(深度)
  8. java中文字符串转化成英文字母
  9. 数据仓库与数据挖掘复习题目
  10. html5新标签转换插件,GOOGLE推出SWIFFY插件 一键转换SWF到HTML5
  11. 冯唐易老,李广难封——2010世界杯印象之五星巴西队
  12. Flutter 内外边距
  13. 第26次Scrum会议(11/14)【欢迎来怼】
  14. ​ 每周一书《数学之美 第二版》分享!
  15. c语言程序设计工资纳税系统,C语言程序设计纳税工资系统
  16. Qt的工程组织-.pro、.pri、.prf、.prl
  17. vscode保存卡顿,显示正在从“‘Vetur‘, ‘ESLint‘”获取代码操作([配置]
  18. oracle spool循环导出文件,oracle 使用spool导出数据到文件
  19. ROS--rospy
  20. UVA1203 Argus

热门文章

  1. Matlab出错向量长度必须相同,Matlab 错误使用 plot 矢量长度必须相同
  2. ThinkPad X1 Nano G2评测
  3. 华为云招募工业智能领域合作伙伴,强力扶持+商业变现
  4. python 消除二值图像中面积小于某个阈值的连通域(消除孤立点)
  5. Java使用FreeMarker导出word
  6. 分享: 星巴克的成功之道
  7. 测试人生 | (汇总篇)从小团队的业务到独角兽的测开,涨薪超过60%,90后小哥哥凤凰涅槃了
  8. 【Electron Playground】Electron 窗口问题汇总
  9. 学系统集成项目管理工程师(中项)系列23b_信息系统集成及服务管理(下)
  10. 回顾SparkFun的micro:bit街机游戏机