爬虫的而基本步骤是什么嘞?
1.观察分析目标网页
2.解析生成图片下地址
3.下载图片
1.观察目标网站进入调试界面
按F12进入调试界面,然后按F5刷新界面。然后我们就能看到网站上的各种资源和代码了。找到式神目录
在调试界面找到Network ,从JS/XHR/Other中寻找式神清单。最终我们在XHR中找到了名为all_shishen.json?v36 的文件。其中all_shishen.json为有效文件名称。
文件地址为:
import requests
import re
import os#导入json文件(里面有所有式神的名字及数字)
from fake_useragent import UserAgent
url='https://yys.res.netease.com/pc/zt/20161108171335/js/app/all_shishen.json'
head={'User-Agent':UserAgent().random} #随机head
html = requests.get(url,headers = head) #添加随机headers,让服务器接收请求
html_json=html.json()
all_shishen.json中某一个式神的内容
#all_shishen.json从提取英雄名字和数字
shishen_id=list(map(lambda x:x['id'],html_json)) #id 序号
shishen_level=list(map(lambda x:x['level'],html_json)) #品质
shishen_name=list(map(lambda x:x['name'],html_json)) #名字
2.解析生成图片下地址获得图片地址
快捷键“shift+ctrl+c”,移动鼠标到对应的元素时即可看到对应网页代码。
式神的图片分为三大类,其对应的地址也不同
#觉醒
#皮肤
注意:链接末尾的?v3可以去掉不影响下载
通过观察发现对于同一式神,data前的地址是完全一样的,data后的地址依据分类和式神的不同而不同。210是鬼使白的编号。
那对于不同式神呢?
我们来看一下海坊主
#初始:
#觉醒:
#皮肤:
对于不同的式神,唯一的差异就在于编号。这个编号在all_shishen.json是有相关信息的,因此我们可以依据此进行遍历。
对于式神的皮肤我们并不知道具体每个式神有多少个,但按照经验,不超过10个,因此我们可以用一个变量从1-10去遍历图片地址,如果有响应我们就储存夏利。
解析图片下载地址!接下来就开始下载图片吧!
3.下载图片
对于每个式神,我们要对三个地址获取图片。在储存图片时,为了避免重名带来的覆盖。撰写了一个check_filename_available()函数来看是否有同名文件存在。具体代码是参考http://www.aspku.com/tech/jiaoben/python/330733.html可以跳转学习。
def main(): #用于下载并保存图片
#图片下载链接
ii=0
for v in shishen_id:
os.mkdir("C:/Users/diana/PycharmProjects/爬虫/图片/阴阳师/"+shishen_name[ii]) #换成你自己的-----创建路径
os.chdir("C:/Users/diana/PycharmProjects/爬虫/图片/阴阳师/"+shishen_name[ii]) #换成你自己的-----改变当前工作目录
ii=ii+1
#式神皮肤
for u in range(6):
# 拼接url
oneshishen_links='https://yys.res.netease.com/pc/zt/20161108171335/data/shishen_skin/'+str(v)+'-'+str(u)+'.png'
im = requests.get(oneshishen_links) # 请求url
if im.status_code == 200:
iv=re.split('-',oneshishen_links)
open(iv[-1], 'wb').write(im.content) # 写入文件
#式神觉醒后
oneshishen_afterAwake_link='https://yys.res.netease.com/pc/zt/20161108171335/data/shishen_big_afterAwake/'+str(v)+'.png'
#式神觉醒前
oneshishen_beforeAwake_link='https://yys.res.netease.com/pc/zt/20161108171335/data/shishen_big_beforeAwake/'+str(v)+'.png'
im_1=requests.get(oneshishen_afterAwake_link)
if im_1.status_code == 200:
iv_1=re.split('/',oneshishen_afterAwake_link)
open(iv_1[-1],'wb').write(im_1.content)
def check_filename_available(filename): #重复文件名字的解决办法http://www.aspku.com/tech/jiaoben/python/330733.html
n=[0]
def check_meta(file_name):
file_name_new=file_name
if os.path.isfile(file_name):
file_name_new=file_name[:file_name.rfind('.')]+'_'+str(n[0])+file_name[file_name.rfind('.'):]
n[0]+=1
if os.path.isfile(file_name_new):
file_name_new=check_meta(file_name)
return file_name_new
return_name=check_meta(filename)
return return_name
im_2=requests.get(oneshishen_beforeAwake_link)
if im_2.status_code == 200:
iv_2=re.split('/',oneshishen_beforeAwake_link)
open(check_filename_available(iv_2[-1]),'wb').write(im_2.content)
main()
至此,运行main()函数我们可以开心的下载阴阳师的立绘啦~~~