lol图片爬取
程序员文章站
2022-03-08 14:04:03
...
LOL英雄图片爬取
-
附上url
这是我们要爬取的主页面
通过上两个图可以看出,注意标注出的url, 这是每个英雄的详情页面的url地址,而每个英雄的页面的url不同的地方为id(这个id很重要),所以可以判断每个英雄都对应着一个自己的id。
而在每个英雄单独的页面中有每个皮肤的大图。
在1.js这个文件中,我们看到了每个皮肤图片的对应的url, 多观察几个页面,你会发现每个英雄的皮肤图片url所在的位置都在id.js中
通过上图,可以看到 - url = ‘https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js’
- 我们在{}中添加英雄的id即可
- OK,现在大概思路已经得到了。
- 首先获取到每个英雄对应的id
- 然后拼接url
- 对拼接后的url发送请求,得到json文件,然后取出图片url,下载每个皮肤的图片即可
- 然后在主页面中通过开发者工具我们挨个的寻找发现我们要找的英雄id在hero_list.js这个文件中
- 一个简单的get请求即可。那么我们现在就已经获取到了英雄id了,那么获取到英雄id后就可以进行下一步,拼接url,得到每个英雄对应的json文件,然后通过返回的json文件中得到图片的url即可下载,大致思路就是这样。
- 贴上代码
import requests
from urllib.request import urlretrieve
from fake_useragent import UserAgent
import json
import os
ua = UserAgent()
headers = {
'user - agent': ua.random
}
def get_id():
url1 = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'
hero_id_list = requests.get(url1, headers=headers).text
hero_json = json.loads(hero_id_list)['hero']
hero = {}
for h in hero_json:
hero[h['heroId']] = h['name'] + '_' + h['title']
return hero
def get_img_url(url):
res = requests.get(url, headers=headers).text
img_json = json.loads(res)['skins']
img = {}
for i in img_json:
name = i['name'].replace(' ', '_')
img[name] = i['mainImg']
return img
def dowmload_img(url, hero_name, skin_name):
path = 'img//' + hero_name
if not os.path.exists(path):
os.makedirs(path)
try:
urlretrieve(url, path + '//' + skin_name + '.jpg')
except:
pass
print('已下载' + hero_name + skin_name)
if __name__ == '__main__':
hero = get_id()
url2 = 'https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js'
for h in hero:
jsurl = url2.format(h)
hero_name = hero[h]
img_list = get_img_url(jsurl)
for i in img_list:
img_url = img_list[i]
skin_name = i
dowmload_img(img_url, hero_name, skin_name)
上一篇: Vue-Element中结合后台的特定的数据给实现考勤表格
下一篇: 字符串分割