最近在学习爬虫,虽然初涉不深,但想找些简单的例子来尝试,看见网上有爬取王者荣耀皮肤的例子,对于王者迷来说,这是一个不能抵制的诱惑,所以借鉴了别人的程序加上自己的见解写下爬取程序,也写下这篇博客记录一下自己初次的成果。
想要爬取图片,就要有该图片的地址,这里我们去王者荣耀官方的的网站去查询能爬取皮肤地址,这里给出链接:https://pvp.qq.com/,然后我们可以找到这个位置:
再点击那个更多,即可进入英雄皮肤的界面:
这里我是用的是谷歌浏览器,我们可以点击鼠标右键的检查或者是F12键,调处网页的代码,我们再调处Network的界面,
对于没有出现herolist.json的,可以刷新页面,
我们随意点开两个json的文件中的一个,然后查看它headers下的url地址,复制它的url地址,然后写下如下代码:
import requests
url = 'https://pvp.qq.com/web201605/js/herolist.json'
response = requests.get(url)
#向url对应的服务器发送对应的get请求,然后获得对应的响应,response中包含
#服务器返回的相应的资源
heroList_json = response.json()
#转为json的格式
print(len(heroList_json))
#英雄总数量
print(heroList_json)
#打印结果
我们运行看结果:
英雄101个,这是正确的,爬取的目标没有错,然后提取的资源的json的格式也在结果中看得到,就包括ename:英雄编号,cname:英雄名称,skin_name:皮肤名称。
我们再找到皮肤的地址,比如http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/533/533-bigskin-2.jpg,我们查询可以发现皮肤的地址的前缀基本一样,就是http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/,533就是图片的英雄编号,bigskin是共有的,而数字2就是该英雄所拥有的第几个皮肤,知道地址的组成结构,我们就可以写出代码:
import os
hero_dir='D:\spider\photo'
if not os.path.exists(hero_dir):
os.mkdir(hero_dir)
#创建存储的文件,判断是否存在,不存在就创建,自己可以更改
for m in range(len(heroList_json)):
hero_num = heroList_json[m]['ename']
#获取英雄编号
hero_name = heroList_json[m]['cname']
#获取英雄名称
skin_names = heroList_json[m]['skin_name'].split('|')
#根据皮肤名分割成皮肤列表
number = len(skin_names)
#皮肤数量
for i in range(1,number+1):
#遍历每一个图片网址
url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'
url_photo = url + str(hero_num) + '/' +str(hero_num) + '-bigskin-' +str(i) + '.jpg'
photo = requests.get(url_photo).content
#获取图片
with open('photo/'+str(hero_name)+'-'+str(skin_names[i-1])+'.jpg','wb') as f:
f.write(photo)
#创建文件并写入文件
整理两段代码点击运行,在相应的photo文件中会出现图片,来放图片:
当然网上说可以加入多进程下载爬取,目前还不会,相信日后可以掌握这门技巧,也希望这篇博客可以给大家带来热趣。