300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Python爬虫练习之爬取英雄联盟皮肤

Python爬虫练习之爬取英雄联盟皮肤

时间:2023-10-22 03:15:35

相关推荐

Python爬虫练习之爬取英雄联盟皮肤

毕业设计还没有弄完,但又不想弄,就先写个爬虫换换心情吧。

爬取的是英雄联盟英雄的皮肤,不过首页的url地址没有我们想要的数据,需要找到真实的url地址,就是简单的json文本,过程比较简单,步骤都写在注释里面了,完整代码如下:

# 导入第三方库import requestsfrom fake_useragent import UserAgentimport timeimport jsonpathimport osimport re'''英雄联盟皮肤爬取'''class HeroSkins():# 初始化对象def __init__(self):# 所有英雄页面的url地址self.hero_list_url = "/images/lol/act/img/js/heroList/hero_list.js"# 英雄详情页的url地址self.detail_url = "/images/lol/act/img/js/hero/{}.js"# 请求头self.headers = {"User-Agent": UserAgent().random}# 定义得到英雄ID的函数def getid(self, url):time.sleep(0.5)# 请求英雄页面的url地址response = requests.get(url, headers=self.headers).json()# 提取hero内的内容hero_list = response["hero"]# 新建英雄id的空列表hero_id_list = []# 遍历循环英雄列表for hero in hero_list:# 将英雄id加入到空列表hero_id_list.append(hero['heroId'])# 返回英雄id列表return hero_id_list# 定义得到皮肤的函数def get_skins(self, hero_id_list):# 创建文件夹if not os.path.exists("Hero Skins"):os.mkdir("Hero Skins")# 遍历循环英雄idfor i in hero_id_list:# 构造英雄详情页的url地址url = self.detail_url.format(i)# 请求详情页的url地址ret = requests.get(url, headers=self.headers).json()# jsonpath提取皮肤的url地址,返回列表skin = jsonpath.jsonpath(ret, '$..mainImg')# jsonpath提取皮肤的名称,返回列表,去掉第一个重复的名称name = jsonpath.jsonpath(ret, '$..name')[1:-1]# 遍历循环皮肤地址,皮肤名称for skin, name in zip(skin, name):# 将名称中的敏感符号替换掉name1 = re.sub("/", "", name)# 判断皮肤列表中是否有空值,如果有则跳过if len(skin) == 0:continue# 保存皮肤with open("Hero Skins" + "/" + name1 + ".jpg", "wb") as f:print("正在写入:" + name)r = requests.get(skin, headers=self.headers)f.write(r.content)# 实现主要逻辑def run(self):url = self.hero_list_urlhero_id_list = self.getid(url)self.get_skins(hero_id_list)# 程序运行接口if __name__ == '__main__':hero_spider = HeroSkins()hero_spider.run()

爬取结果的部分截图:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。