Python采集王者皮肤图片实战示例
作者:极客飞虎 发布时间:2021-08-02 12:09:23
数据采集
我们上一篇介绍了,如何采集王者最低战力,本文就来给大家介绍如何采集王者皮肤,买不起皮肤,当个桌面壁纸挺好的。下面,我和大家介绍如何获取数据。
确定网址
我们在对王者英雄的主页,进行了分析,我们发现,其网页地址相似,就差一个数字。
https://pvp.qq.com/web201605/herodetail/{ename}.shtml
我们可以把它当作为每个英雄的编号,我们可以从英雄列表获取编号,不过,这里我们直接请求第三方接口数据。
获取英雄编号
html_url ='https://www.sapi.run/hero/getHeroList.php'
datas = requests.get(html_url).json()['data']
for data in datas:
ename = data['ename']
cname = data['cname']
print(ename,cname)
这段代码中,html_url
是一个 URL,指向一个 SAPI 的 Hero 列表页面。requests.get(html_url).json()['data']
返回一个 JSON 对象,其中包含了 Hero 列表页面的数据。ename
和 cname
是 JSON 对象中的两个键值对,分别表示 Hero 的编号
和名字
。
在这段代码中,我们使用了一个 for
循环来遍历 JSON 对象中的每一个键值对,并打印出它们的值。这样就可以得到 Hero 列表页面中所有 Hero 的编号
和名字
。
获取皮肤名称
我们拿到每一个英雄的编号之后,我们就可以访问每一个英雄的主页,我们在其主页可以看到他们的英雄名称和他们的英雄皮肤的地址。我们先获取英雄皮肤的名称。
herodetail_url = f'https://pvp.qq.com/web201605/herodetail/{ename}.shtml'
print(herodetail_url)
res = requests.get(herodetail_url,headers=headers)
res.encoding = 'gbk'
# print(res.text)
pfs = re.findall('data-imgname="(.*?)"',res.text)[0]
pfs=pfs.split('|')
print(pfs)
这段代码中,herodetail_url
是一个 URL,指向一个 Hero 详细页面。requests.get(herodetail_url,headers=headers)
返回一个 JSON 对象,其中包含了 Hero 详细页面的数据。res.encoding = 'gbk'
设置了 JSON 对象的编码方式为 GBK。re.findall('data-imgname="(.*?)"',res.text)[0]
使用正则表达式匹配 Hero 详细页面中的英雄名称,并返回第一个匹配项。pfs
是匹配项的值,它是一个包含英雄名称的列表。
接下来,我们对字段进行处理。
for pf in pfs:
pf = pf.split('&')[0]
# print(pf)
pf_list.append(pf)
print(len(pf_list))
print(pf_list)
我们得到了这样的数据。['正义爆轰', '地狱岩魂', '无尽征程', '寅虎·御盾']
,到了这里,我们皮肤名字就获取下来了。
获取皮肤
pages = len(pfs)
for page in range(1,pages+1):
pf_url = f'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{page}.jpg'
pf_url_list.append(pf_url)
这段代码中,我们首先计算出 Hero 详细页面中图片的数量,然后使用 range
函数生成从 1 到 pages
的整数序列。接下来,我们使用一个循环来遍历这个序列,并将每个图片的 URL 添加到 pf_url_list
列表中。
最后,我们将 pf_url_list
列表中的所有 URL 连接起来,并将它们作为参数传递给 requests.get()
函数,以获取 Hero 详细页面的数据。
到这里,我们把所有皮肤的地址获取了下来。
保存数据
for name,url in zip(pf_list,pf_url_list):
path = f'.//皮肤//{cname}//'
# print(path)
if not os.path.exists(path):
os.mkdir(path)
# print(cname,name,url)
pf_save = requests.get(url,headers=headers)
print(f"path + '{name}.jpg'")
with open(path + f'{name}.jpg', 'wb') as f:
f.write(pf_save.content)
这段代码中,我们首先将 pf_list
和 pf_url_list
两个列表进行了 zip
操作,并将结果存储在 pf_list
和 pf_url_list
两个变量中。然后,我们使用 os.path.exists()
函数来检查 path
目录是否存在,如果不存在,则使用 os.mkdir()
函数创建该目录。接下来,我们使用 requests.get()
函数来获取 pf_url_list
列表中的每个 URL,并将它们作为参数传递给 requests.get()
函数,以获取 pf_list
列表中的每个 URL。
最后,我们使用 with open()
语句打开 path + '{name}.jpg'
文件,并将 pf_save.content
写入该文件中。这样就可以将 pf_list
和 pf_url_list
中的每个 URL 保存到 path + '{name}.jpg'
文件中。
来源:https://juejin.cn/post/7221821674747494437
猜你喜欢
- 高考在即,笔者想为孩子以后能够快乐学习数学、学习编程找到一个比较合适的项目,经过一番比较发现github上的万星项目manim(https:
- 1.表达式操作符Table 1 算术操作符操作符 语法 含义+ a + b 相加 - a - b 相减 - - a
- 很久没写过东西了,今天看了chinahuman 的《用asp自动解析网页中的图片地址,并将其保存到本地服务器》,于是优化了这个程序,并且将所
- 0. 我们如何通过邮件系统完成远程控制电脑(关机、重启等)?实现思路:需要有两个邮箱:接收指令邮箱(A)发送指令邮箱(B)被控制的电脑(查看
- 一,斑马线的数据集数据集的构成:testtrainzebra corssing:56zebra corssing:168other:54ot
- 可用性研究表明,当响应时间超过一秒钟时,用户便能够有所察觉。虽然在反馈系统中,当用户需要等待时,更好的解决方案的是应该采用确定性的进度条。但
- DataFrame筛选数据与loc用法python中pandas下的DataFrame是一个很不错的数据结构,附带了许多操作、运算、统计等功
- 在程序中,经常需要将⼀组(通常是同为某个类型的)数据元素作为整体 管理和使⽤,需要创建这种元素组,⽤变量记录它们,传进传出函数等。 ⼀组数据
- 前言:python 中协程概念是从 3.4 版本增加的,但 3.4 版本采用是生成器实现,为了将协程和生成器的使用场景进行区分,使语义更加明
- 某些时候我们需要让类动态的添加属性或方法,比如我们在做插件时就可以采用这种方法。用一个配置文件指定需要加载的模块,可以根据业务扩展任意加入需
- Microsoft SQL Server 2000 能提供超大型系统所需的数据库服务。大型服务器可能有成千上万的用户同时连接到 SQL Se
- 如何在线压缩Access数据库?Access数据库可以在线压缩吗?可以的,代码和说明见下:compact.asp<%option&nb
- OK,首先写一个python socket的server段,对开放三个端口:10000,10001,10002.krondo的例子中是每个s
- 前言一首歌热门了,参与评论的人也很多,这时无论好坏评论都来了,没有人控评得话,指不定乱七八糟但是自己有喜欢看评论,不想影响好心情,想看看精彩
- 需求说明:通过在界面上输入春联的上、下批和横批汉字从而生成春联图像,最后将春联图片保存。有实际需要的还可以将春联打印。实现过程:实现思路是先
- Python Dash开发Web应用的控件基础本文主要是通过Dash的Checklist组件,简单介绍使用Dash开发的Web应用展示效果如
- 如下所示:>> type(np.newaxis)NoneType>> np.newaxis == NoneTruen
- 对于简单的网络例如全连接层Linear可以使用以下方法打印linear层:fc = nn.Linear(3, 5)params = list
- 实例如下:import sysdef print_all(module_): modulelist = dir(module_)
- 1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0)