王者荣耀高清英雄大图赠送 | LSABLOG

首页 » Program » Python » 正文

王者荣耀高清英雄大图赠送

听说xx荣耀最近很火,那不如一起……写个小爬虫玩玩,顺便找回手感。

功能说明:
爬取xx荣耀官网英雄大图,并保存到本地。

这是单线程版本,保存的地址根据自身情况修改。还写了个多线程版本,但是开5个线程就被反爬了,有空优化一下再发。

源码:

#coding:utf-8
#Author:LSA
#Description:crawler wzyy heros pics
#Data:20170827

import requests,os,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

heroListUrl = 'http://pvp.qq.com/web201605/js/herolist.json'
headers = {
        "User-Agent":"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)"
    }

def main():
    
    print 'Starting......'

    heroListHtml = requests.get(heroListUrl,headers=headers)
    heroListHtml.encoding = 'utf-8'
    heroListJson = heroListHtml.json()
    #print heroListJson

    heroName = list(map(lambda x:x['cname'],heroListJson))
    heroNumber = list(map(lambda x:x['ename'],heroListJson))
    print '--------Total hero number '+str(len(heroNumber))+'---------'
    
    print 'Crawler......'
    
    n = 0
    for i in heroNumber:
        os.mkdir("/lsa/Pictures/kingheropics/"+heroName[n])
        os.chdir("/lsa/Pictures/kingheropics/"+heroName[n])
        print '===Get '+heroName[n]+' pics==='
        
        for j in range(1,16):
            heroUrl = "http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/%s/%s-bigskin-%s.jpg" % (str(i),str(i),str(j)) 
            heroPic = requests.get(heroUrl,headers=headers)
            if heroPic.status_code == 200 or heroPic.status_code == 304:
                open(heroUrl.split('-')[-1],'wb').write(heroPic.content)
                print 'Got '+str(heroName[n])+' pic'+' '+str(j)
            else:
                break
        n = n + 1
    print '=========================All over!======================='

if __name__=='__main__':
    main()
                

效果图:

写这个程序的时候遇到了中文乱码问题,将在下一篇文章中细细道来。

 

Comment