这篇文章主要介绍了python如何爬取英雄联盟皮肤图片的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python如何爬取英雄联盟皮肤图片文章都会有所收获,下面我们一起来看看吧。

一开始都是先去《英雄联盟》官网找到英雄及皮肤图片的网址:

URL = r'https://lol.qq.com/data/info-heros.shtml'

从上面网址可以看到所有英雄都在,按下F12查看源代码,发现英雄及皮肤图片并没有直接给出,而是隐藏在JS文件中。这时候需要点开Network,找到js窗口,刷新网页,就看到一个champion.js的选项,点击可以看到一个字典——里面就包含了所有英雄的名字(英文)以及对应的编号。

但是只有英雄的名字(英文)以及对应的编号并不能找到图片地址,于是回到网页,随便点开一个英雄,跳转页面后发现英雄及皮肤的图片都在,但要下载还需要找到原地址,这是鼠标右击选择“在新标签页中打开”,新的网页才是图片的原地址。

图中红色框就是我们需要的图片地址,经过分析知道:每一个英雄及皮肤的地址只有编号不一样(http://ossweb-img.qq.com/images/lol/web201310/skin/big266000.jpg),而该编号有6位,前3位表示英雄,后三位表示皮肤。刚才找到的js文件中恰好有英雄的编号,而皮肤的编码可以自己定义,反正每个英雄皮肤不超过20个,然后组合起来就可以了。

图片地址搞定都就可以开始写程序了:

第一步:获取js字典

defpath_js(url_js):res_js=requests.get(url_js,verify=False).contenthtml_js=res_js.decode("gbk")pat_js=r'"keys":(.*?),"data"'enc=re.compile(pat_js)list_js=enc.findall(html_js)dict_js=eval(list_js[0])returndict_js第二步:从 js字典中提取到key值生成url列表

defpath_url(dict_js):pic_list=[]forkeyindict_js:foriinrange(20):xuhao=str(i)iflen(xuhao)==1:num_houxu="00"+xuhaoeliflen(xuhao)==2:num_houxu="0"+xuhaonumStr=key+num_houxuurl=r'http://ossweb-img.qq.com/images/lol/web201310/skin/big'+numStr+'.jpg'pic_list.append(url)print(pic_list)returnpic_list第三步:从 js字典中提取到value值生成name列表

defname_pic(dict_js,path):list_filePath=[]fornameindict_js.values():foriinrange(20):file_path=path+name+str(i)+'.jpg'list_filePath.append(file_path)returnlist_filePath第四步:下载并保存数据

defwriting(url_list,list_filePath):try:foriinrange(len(url_list)):res=requests.get(url_list[i],verify=False).contentwithopen(list_filePath[i],"wb")asf:f.write(res)exceptExceptionase:print("下载图片出错,%s"%(e))returnFalse

执行主程序:

if__name__=='__main__':url_js=r'http://lol.qq.com/biz/hero/champion.js'path=r'./data/'#图片存在的文件夹dict_js=path_js(url_js)url_list=path_url(dict_js)list_filePath=name_pic(dict_js,path)writing(url_list,list_filePath)

关于“python如何爬取英雄联盟皮肤图片”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python如何爬取英雄联盟皮肤图片”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。