当前位置: 首页 > 后端技术 > Python

python爬虫批量爬Minecraft游戏皮肤

时间:2023-03-26 13:35:26 Python

使用requests爬mc著名皮肤网站blessingskinblessing皮肤网站介绍:blessing皮肤网址为https://skin.prinzeugen.net/,是mc玩家喜爱的皮肤网站。它的皮比我们之前爬过的小皮还要多。东西准备python解释器爬虫库请求爬取祝福皮肤的思路:获取皮肤的URL,形式为https://skin.prinzeugen.net/s...+皮肤编号。在网页源代码中获取皮肤的详细介绍。然后通过https://skin.prinzeugen.net/raw/+skinnumber.png获取下载的URL,请求并保存到本地。程序的使用:让用户输入皮肤编号,程序返回皮肤的详细介绍,并询问用户是否下载皮肤。如果皮肤号不存在,将要求用户重新输入皮肤号。importrequestsimportre首先,importre和requests。re模块主要是帮助我们找到皮肤的详细介绍,requests是我们爬虫项目的主要爬虫框架。如果我们要获取图片链接,就需要让用户输入一个数字。之后我们就可以拼接链接了!str_id=input("请输入你要查看的皮肤编号:")url='https://skin.prinzeugen.net/skinlib/show/'+str_id+'png'别忘了加上png!然后请求拼接后的链接。image=requests.get(url).content我们已经请求了图片形式的url。这时候我们可以使用with关键字来保存到本地!但在此之前,我们需要一个保存的名称,所以我们使用1.png作为名称。withopen(savedpath+'1.png','wb')asfile:file.write(image)打开保存的目录,成功!我也是业余时间扩充了代码,大家可以参考一下。importrequestsimportreimportosimporttimeprint("提示:ctrl+c快速退出程序")defcatch():try:print("指定皮肤号查看下载模式,请输入1,输入其他键默认为批量下载模式。")word=input(">>>")ifword=='1':whileTrue:str_id=input("请输入您要查看的皮肤编号:")whilestr_id.isdigit()==False:str_id=input("请输入您要查询的皮肤编号:")url='https://skin.prinzeugen.net/skinlib/show/'+str_idtext=requests.get(url).textcheck=re.findall('

(.*?)

',text)ifcheck[0]=='详细信息:请求的纹理已被删除。'或检查[0]=='详细信息:请求的纹理是私有的,只对上传者和管理员可见。':打印(“无法访问此皮肤!请重新输入皮肤编号!”)继续skin_name=re.findall('(.*?)-祝福皮肤',text)[0]likes=re.findall('(.*?)',text)[0]model=re.findall('(.*?)',text)[0]size=re.findall('(.*?)',text)[3]print('''\n--皮肤内容--名称:%s适用机型:%s文件大小:%sFavorites:%s\n'''%(skin_name,model,size,likes))choose=input("Doyouwanttodownloadthisskin?(y/n):").lower()whilechoose!='y'andchoose!='n':choose=input("Doyouwanttodownloadthisskin?(y/n):").lower()ifchoose=='y':path=input("Skinsavepath(Pleaseuseaslash"/"):"while'/'notinpath:print("Pleaseuseaslash"/"!")path=input("Skinsavepath:")check=操作系统路径。exists(path)whilecheck==False:print("目录不存在!")path=input("皮肤保存路径(请使用斜线"/"):")while'/'notinpath:print("Pleaseuseslash"/"!")path=input("Skinsavepath:")check=os.path.exists(path)skn_url='https://skin.prinzeugen.net/raw/'+str_id+'.png'image=requests.get(skn_url).contentimg_name=skn_url.split('/')[4]print("正在下载..")withopen(path+'/'+img_name,'wb')asfile:file.write(image)success=Trueifsuccess:print("Downloadsucceeded!")else:print("Downloadfailed!")catch()else:print("注意:批量下载过程中如果遇到不存在的皮肤,将不会下载!")id1=input("请输入批量下载的起始皮肤编号:")whileid1.isdigit()==False:id1=input("批量下载请输入起始皮肤编号:")id2=input("批量下载请输入结束皮肤编号:")whileid2.isdigit()==False:id2=input("批量下载请输入结束皮肤编号:")check=Falsewhilecheck==False:path=input("皮肤保存路径(请使用斜杠"/"):")而'/'不在pat中h:print("请使用斜杠“/”!")path=input("皮肤保存路径:")check=os.path.exists(path)ifcheck==False:print("目录不存在!")id1=int(id1)id2=int(id2)print("下载中...")foriinrange(id1,id2+1):url='https://skin.prinzeugen.net/skinlib/show/'+str(i)text=requests.get(url).textcheck=re.findall('

(.*?)

',text)ifcheck[0]=='详情:请求的纹理已被删除。'或检查[0]=='详细信息:请求的纹理是私有的,仅对上传者和管理员可见。':继续img_url='https://skin.prinzeugen.net/raw/'+str(i)+'.png'image=requests.get(img_url).contentimg_name=img_url.split('/')[4]withopen(path+'/'+img_name,'wb')作为文件:file.write(image)print("下载完成!")catch()exceptKeyboardInterrupt:print("Youexitedtheprogram!")time.sleep(3.5)exit()exceptrequests.exceptions.ConnectionError:print("Network异常!”)time.sleep(3.5)exit()catch()