加入收藏 | 设为首页 |

朝歌-python爬取《王者荣耀》《英豪联盟》等游戏官网皮肤图片

海外新闻 时间: 浏览:120 次

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

这儿首要解说《王者荣耀》的爬取办法,其他相似。

•《王者荣耀》

•一切英豪

首要进入一切英豪列表,你会看到下图:

在这个网页中包含了一切的英豪,头像及英豪称号。

•单个英豪

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

“百里守约”里边有两个皮肤图片(如右下角所示)。咱们便是要抓取这样的图片(留意:不是右下角那两张小图,而是如上图所示中的大图)。在这个网页中检查“百里守约”的网址,能够看到网址是:https://pvp.qq.com/web201605/herodetail/196.shtml。其实网址中196.shtml曾经的字符都是不变的,改变的仅仅196.shtml。那么196是什么呢?乍一看毫无意义,其实它是“百里守约”这个英豪所对应的数字(我也不知道为啥这样对应!!)。也便是说,要想爬取图片你就应该进入每个英豪皮肤图片地点的网址。就像上图所示的“百里守约”。而要爬取一切英豪的图片,就应该有一切单个英豪的网址。一切英豪的网址的要害便是每个英豪对应的数字。那么这些数字怎样找呢?

•英豪数字

在一切英豪列表中,翻开浏览器的开发者东西(F12),改写,找到一个json格局的文件,如图所示:

这时就会看到一切英豪对应的数字了。在上图所示的Headers中能够找到该json文件对应的网址方式。将其导入Python,把这些数字提取出来,然后模仿出一切英豪的网址即可(网址的格局在上一末节中现已提过了)。

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

#爬取王者荣耀英豪图片#导入所需模块
import requests
import re
import os#导入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(lambda x:x['cname'],html_json)) #姓名
hero_number=list(map(lambda x:x['ename'],html_json)) #数字

下载图片

现在能够进入一切英豪的网址了,能够爬取网址下的图片了。进入一个英豪的网址,翻开开发者东西,在NetWork下改写并找到英豪的皮肤图片(记住是大图)。如图所示:

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

def main(): #用于下载并保存图片
ii=0
for v in hero_number:
os.mkdir("/home/wajuejiprince/图片/WZR朝歌-python爬取《王者荣耀》《英豪联盟》等游戏官网皮肤图片Y/"+hero_name[ii]) #换成你自己的
os.chdir("/home/wajuejiprince/图片/WZRY/"+hero_name[ii]) #换成你自己的
ii=ii+1
for u in range(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)
if im.status_code == 200:
iv=re.split('-',onehero_links)
open(iv[-1], 'wb').write(im.content)

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

main()

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

《英豪联盟》(美服)(两种办法)

这两种办法的差异就在于:第一种不必调查图片规则,直接提取图片网址;第二种和抓取《王者荣耀》相似,都是模仿图片地址。

- 第一种

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

#导入模块
import requests
import re
from bs4 import BeautifulSoup
import os

得到英豪的姓名:

url='http://ddragon.leagueoflegends.com/cdn/6.24.1/data/en_US/champion.json' #json里边含有一切英豪的姓名def get_特色小吃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=[] #此刻的姓名便是小写了
for ii in list_of_nameMax:
name=ii.lower()
list_of_nameMin.append(name)
return list_of_nameMin

界说下载一个英豪图片的函数:

def get_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.text
soup=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))
return hero_img_links

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

def main(): #用于下载并保存图片
list_name=list_of_name
for i in list_name:
os.mkdir("/home/wajuejiprince/图片/LOL/"+i)
os.chdir("/home/wajuejiprince/图片/LOL/"+i)
ashe=get_onehero_img(i)
for j in ashe:
im=re.sub('"','',j)
ir = requests.get(im)
if ir.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里边含有一切英豪的姓名def get_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) #此刻的英豪姓名的首字母是大写
return list_of_nameMax

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

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

履行:

main()

《神之浩劫》(美服)

import requestsimport reimport osurl='https://www.smitegame.com/gods/'head={'User-Agent':'你的head'}html = requests.get(url,headers = head)reg=re.compile(r'href="(.*?)">\n 
html_hero = requests.get(ul,headers = head)
if html_hero.status_code == 200:
reg2=re.compile(r'"background-image:url\((.*?)\)">\n',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
f朝歌-python爬取《王者荣耀》《英豪联盟》等游戏官网皮肤图片or 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()

关于《神之朝歌-python爬取《王者荣耀》《英豪联盟》等游戏官网皮肤图片浩劫》的代码有些英豪在json文件中的姓名还不是该英豪网址的姓名,记住应该朝歌-python爬取《王者荣耀》《英豪联盟》等游戏官网皮肤图片是孙悟空等,只需将hero_name中这些英豪的称号改对即可(我没有改,所以没有下全)。

  • 最终--美图赏识

蔡文姬:

狄仁杰:

贾克斯:

阿兹尔:

阿格尼:

.