王者荣耀全英雄皮肤
王者荣耀全英雄皮肤。还有哪位老大抓王者全英雄皮肤代码比这个还少的???
发出来交流交流:lol!!!!
import os
from urllib.parse import urljoin
import requests
from lxml import etree
def id_name1(ID_list, cname):
if os.path.exists('picture'):
pass
else:
os.mkdir('picture')
resp = requests.get(ID_list)
resp.encoding = resp.apparent_encoding
curr = etree.HTML(resp.text)
src = curr.xpath("//div[@class='zk-con1 zk-con']/@style")
pic_pf = curr.xpath("//div[@class='pic-pf']/ul/@data-imgname")
a = urljoin(ID_list, src.split("'")).split('-1')
j = 1
for i in pic_pf.split("|"):
# if os.path.exists('picture/' + cname):
# pass
# else:
# os.mkdir('./picture/' + cname)
if requests.get(f"{a + '-'+str(j) + a}").status_code == 200:
a_liat = a + '-' + str(j) + a
# with open("./picture/" + cname + "/" + i + ".jpg", "wb") as f:
# f.write(requests.get(a_liat).content)
# print("下载好了", i)
print(a_liat, cname, i)
j += 1
def main(url):
resp = requests.get(url)
resp.encoding = resp.apparent_encoding
for i in resp.json():
yingxiong = f"https://pvp.qq.com/web201605/herodetail/{i['id_name']}.shtml"
id_name1(yingxiong, i['cname'])
if __name__ == '__main__':
url = 'https://pvp.qq.com/web201605/js/herolist.json'
main(url)
Sen 发表于 2024-2-28 14:07
没理解到你这个操作。。。 本帖最后由 爱飞的猫 于 2024-2-29 07:44 编辑
[从 Python 3.2 开始](https://docs.python.org/zh-cn/3.11/library/os.html#os.makedirs),可以直接让它建立目录而无需事先检查是否已经存在:
```py
os.makedirs('image_path', exist_ok=True)
```
另外,看了下英雄介绍的 html 页面,其中背景图片地址是可以根据 id 来拼接的:
```js
burl = "//game.gtimg.cn/images/yxzj/img201606/skin/hero-info/" + ename + '/' + ename // 背景图的前缀
function wrap(a, b) {
for (var i = a; i < b; i++) {
var bskin = burl + "-bigskin-" + (i + 1) + ".jpg"; // 拼接
// 无关内容省略
};
}
wrap(0, skins.length);
```
不用爬页面获取地址,又能省几行。
---
不过重要的并不是多少行,也要考虑代码的可读性 - 使用各种单字符的变量名可能现在还记得,过一段时间再看可能就不记得了。
最后全部整理一下:
```py
#!/usr/bin/env python3
import os, re, requests, lxml.html
# 根据英雄 ID (ename) 和皮肤索引 (从 1 开始) 来获取对应的皮肤背景图片地址
def get_hero_skin_url(ename, index):
return f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{index}.jpg'
# 下载英雄皮肤数据到 `./picture/英雄名称` 目录下
def download_skin(hero, name_suffix=''):
# 初始化一些变量
hero_url = f"https://pvp.qq.com/web201605/herodetail/{hero['id_name']}.shtml"
ename = hero['ename']
cname = hero['cname']
# 确保图片下载目录存在
os.makedirs(f'picture/{cname}', exist_ok=True)
# 解析页面信息
doc = lxml.html.fromstring(requests.get(hero_url).content)
# 解析皮肤名称
skin_names = doc.find_class('pic-pf-list').get('data-imgname')
skin_names = re.sub(r'&\d*', '', skin_names)
skin_names = skin_names.split("|")
# 依次下载皮肤图片
for (i, skin_name) in enumerate(skin_names, start=1):
print(f'\33[2K正在下载: {cname}{name_suffix} -- {skin_name} ({i}/{len(skin_names)})\r', end='')
resp = requests.get(get_hero_skin_url(ename, i))
resp.raise_for_status() # 若是请求失败,抛出错误
with open(f'picture/{cname}/{i:02d}-{skin_name}.jpg', 'wb') as f:
f.write(resp.content)
print(f'\33[2K下载完成: {cname}{name_suffix}')
# 地址可选,默认为英雄列表 JSON 数据。
def main(url = 'https://pvp.qq.com/web201605/js/herolist.json'):
hero_data = requests.get(url).json()
for (i, hero) in enumerate(hero_data, start=1):
download_skin(hero, f' ({i}/{len(hero_data)})')
if __name__ == '__main__':
main()
```
P.S. 可以尝试加入多线程下载 curl https://pvp.qq.com/web201605/js/herolist.json 不懂就问,这个有啥用。。 可有成品能用的 Love0912 发表于 2024-2-28 14:06
不懂就问,这个有啥用。。
交流,比比看谁的代码更少、:keai m16yjq 发表于 2024-2-28 14:08
可有成品能用的
那你就用成品吧。我说的是交流,比比看谁抓王者荣耀的皮肤代码更少:keai 没明白啥意思,是可以在玩着荣耀里玩所有皮肤? 不觉明历
不觉明历