先来看一张图片。
image.png
先讲解下思路,然后直接放源码,想要获取源码的同学直接拉到最下面就好。
1.爬虫第一步
首先要分析网页的DOM结构,就是英雄联盟官网,然后在下面找到英雄资料。然后在这里发现一个神奇的文件hero_list.js
,打开看一下,结构是这样的。
image.png
嗯~~~,感觉可以省了好多工作了。可以到bejson转中文,然后解析看一下,妥妥的json文件。
其实在这个文件里,我们需要的就一个heroId,因为在英雄详情页,有1.js
,2.js
,天真的我以为全部是按顺序排的,所以直接写了个循环去获取,后来发现不是,走过的坑就不带大家走一遍了,直接说结论,有heroId
,接下来就好办了,在英雄详情页可以找到这个文/images/lol/act/img/js/hero/1.js,这个文件也是一个标准的json文件,里面包含英雄的基本信息,还有皮肤信息。图片路径也在这里面。好了到目前为止准备工作是做好了。
2.爬虫第二步
准备工作做好了,接下来当然是开始写代码了。思路也很简单,首先读取hero_list.js
,获取所有的heroId
,然后拼装为这样的文件路径
url="/images/lol/act/img/js/hero/"+str(c["heroId"])+".js"
接下来就是挨个去读取文件找到图片地址,下载图片就好了。这里面我稍稍做了点修改,包括创建文件夹的时候,是将英雄名称作为文件夹名,皮肤名字作为图片名字,因为不做修改的话,下下来的图片全部都是big1005.jpg,big1006.jpg
,皮肤作为文件名字的话有些特殊的字符串需要去掉,文件名是不允许/
出现的,英雄皮肤名字中有个K/D/A
,具体是谁忘了,所以拿皮肤名字作为文件名的话,有些特殊字符需要去掉。好了,接下来放出完整代码。代码中写了很多注释,可以参考下。
#coding:utf8import requestsimport jsonimport osimport urllib.requestcur_path = os.path.abspath(os.curdir)champion = "/images/lol/act/img/js/heroList/hero_list.js"championobj = json.loads(requests.get(champion).text)heroIds = championobj['hero']# print(championobj)# # print(jsonobj)for c in heroIds:print(c["heroId"])url="/images/lol/act/img/js/hero/"+str(c["heroId"])+".js"# 发送请求,获取响应结果response = requests.get(url)text = response.text# 打印本次请求响应内容# print(text)# 将响应内容转换为Json对象jsonobj = json.loads(text)# print(jsonobj)#获取英雄名称作为文件夹名heroname = jsonobj["hero"]["name"] print(heroname) isExists=os.path.exists(cur_path+'/所有皮肤图片/'+heroname)skinpath =cur_path+'/所有皮肤图片/'+heronameif not isExists:os.makedirs(cur_path+'/所有皮肤图片/'+heroname)# print(heroname)#获取所有的皮肤heroskins = jsonobj["skins"]# print(heroskins)for s in heroskins:skinname = str(s["name"]).replace(' ','-').replace('/','') #皮肤名字skinimage = str(s["mainImg"]) #皮肤图片路径if(len(skinimage)!=0): file_suffix = os.path.splitext(skinimage)[1]filename = '{}{}{}{}'.format(skinpath,os.sep,skinname,file_suffix)urllib.request.urlretrieve(skinimage,filename)# print(skinimage)
其实我写这个项目的时候,就是自己的一个非常偶然的想法,也是我刚学习python的一个练手项目,回头去百度上一查,呃,发现好多好多人已经写过获取英雄联盟图片的项目了,比我写的好多了。所以我的就参考一下就好。
源码已经放到上面了,公众号关不关注都行,就是佛系,就是任性。
爱游戏爱编程.jpg