admin管理员组文章数量:1435859
【爬虫】
分析过程:
url:.shtml
没分析请求之前准备用xpath取出每个英雄的链接然后再发送请求取出英雄皮肤图片和皮肤名,该方案可行难度不高
在分析请求后发现有一个js请求里包含了所有英雄的信息,可以取出英雄id和name :.js
每个英雄的信息页面有一个js请求包含了英雄的皮肤数量和皮肤名称,Galio为英雄的名称,是第一个js中获取的英雄名,如: .js
爬取思路:
1、获取第一个js请求所有英雄的id和name
2、组合所有英雄的js请求url列表:heros_url = []
3、遍历列表,获取每个英雄的皮肤名称和图片链接地址
4、下载图片
代码如下:
# coding: utf-8import urllib2
import os
import json, redef get_heros_json():''' 通过url,获取所有hero的信息集合,json格式为:{u'133': u'Quinn', u'91': u'Talon'} '''url = ".js"response = urllib2.urlopen(url=url)html = response.read() # .decode("utf-8")html_json = re.findall(r'LOLherojs.champion=(.+?);', html)heros_json = json.loads(html_json[0])['keys']# print heros_jsonget_heros_url(heros_json)# return heros_urldef get_heros_url(heros_json):''' 遍历传入的json拼接每个的英雄js请求url'''# 用于存储英雄的请求地址heros_url = []for key in heros_json:# print ("hero is %s; value is %s " % (key, heros_json[key]))hero_url = "/" + heros_json[key] + ".js"# return heros_url.append(hero_url)heros_url.append(hero_url)# return heros_urlget_hero_info(heros_url)def get_hero_info(heros_url):# windos# 检查文件夹是否存在,不存在则创建save_dir = '.\\heros\\'if(not os.path.exists(save_dir)):os.makedirs(save_dir)for hero in heros_url:get_hero(hero)print ("下载完成!")# heros_url=".js"# get_hero(heros_url) def get_hero(hero):''' 获取一个英雄的js请求信息 '''# print heroresponse = urllib2.urlopen(url=hero)html = response.read()html_json = re.findall(r"\"data\":(.+?);", html)# 构造完整的json格式( 缺少{"data": )html_json = "{\"data\":" + html_json[0]# print html_json# 将json转成python的对象hero_json = json.loads(html_json)# 设置默认的英雄名字dafault = hero_json["data"]["name"]# print dafaultget_download(hero_json, dafault)def get_download(hero_json, dafault):''' '''# 英雄皮肤的列表hero_skinsjson = hero_json["data"]['skins']# print hero_skinsjsoni = 0imgId = ''imgName = ''for key in hero_skinsjson:if i == 0:imgId = key['id']imgName = dafaulti += 1else:imgId = key['id']imgName = key['name']imgName = imgName.replace("/", '').decode("utf-8") save_dir = ".\\heros\\"save_file_name = save_dir + imgName + ".jpg"url = "" + imgId + ".jpg"# print urltry:if (not os.path.exists(save_file_name)):content = urllib2.urlopen(url=url).read()with open(save_file_name, "wb") as f:f.write(content)except Exception:print("下载失败"+ url + " name is " + imgName)def main():heros_url = get_heros_json()if __name__ == '__main__':main()'''
下载失败.jpg name is K/DA 伊芙琳
下载失败.jpg name is K/DA 阿卡丽
下载失败.jpg name is K/DA 阿狸
下载失败.jpg name is K/DA 卡莎
下载失败.jpg name is K/DA 卡莎 至臻
下载完成!
错误原因是文件名的编码问题,去除了'/'也是不行,会乱码解决办法 imgName = imgName.replace("/", '').decode("utf-8")
'''
代码也是参考别人的思路加上自己的思考,仅供学习和参考,转发请注明出处
参考网址:
本文标签: 爬虫
版权声明:本文标题:【爬虫】 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1703137041a600321.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论