《Python程序设计》实验四报告

20222108 2022-2023-2 《Python程序设计》实验四报告

课程:《Python程序设计》
班级: 2221
姓名: 多乐
学号:20222108
实验教师:王志强
实验日期:2022年5月10日
必修/选修: 公选课

1.实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)

例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。

例如:利用公开数据集,开展图像分类、恶意软件检测等

例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。

例如:爬取天气数据,实现自动化微信提醒

例如:利用爬虫,实现自动化下载网站视频、文件等。

例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等

注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

2. 实验过程及结果

利用爬虫实现王者荣耀所有皮肤图片的爬取。

1) 寻找皮肤图片地址

进入王者荣耀官网——“游戏资料”——“英雄资料”
在这里插入图片描述
按F12进入调试界面,然后按F5刷新界面,图中标识的herolist.json文件就是我们所需要的英雄列表,其中包括英雄编号、英雄名称、英雄类型、皮肤的名称等信息。
在这里插入图片描述
在文件上右击复制链接http://pvp.qq.com/web201605/js/herolist.json
接着利用以下代码,爬取资料:

# 代码片段1
import urllib.request
import json
import os

response = urllib.request.urlopen("http://pvp.qq.com/web201605/js/herolist.json")

hero_json = json.loads(response.read())
hero_num = len(hero_json)

print(hero_json)
print("hero_num : " , str(hero_num))


接着我们选择一个英雄点开,以我最喜欢的英雄花木兰为例。
在这里插入图片描述
在这里插入图片描述
得到了原图的链接地址https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/154/154-bigskin-1.jpg
用同样的方法对比其他皮肤和英雄可以分析得到154为英雄编号,最后的1为该英雄的皮肤编号。

2) 下载图片

在第一步获取到的herolist.json文件中有**“skin_name”**字段,我们只要解析这个字段就可以获取皮肤数量和皮肤名称。测试代码(接代码片段1)如下:

  # 代码片段2
  hero_name = hero_json[0]['cname']
  skin_names = hero_json[0]['skin_name'].split('|')
  skin_num = len(skin_names)
    
  print('hero_name: ', hero_name)
  print('skin_names :', skin_names)
  print('skin_num: ' + str(skin_num))

测试结果如下:
在这里插入图片描述
可以得到编号为1的英雄的信息。
接着我们就可以下载了。
下载文件用到urlretrieve接口,测试代码如下:

for i in range(hero_num):
  	# 获取皮肤名称列表
    skin_names = hero_json[i]['skin_name'].split('|')
    
    for cnt in range(len(skin_names)):
        save_file_name = 'D:\heroskin\\' + str(hero_json[i]['ename']) + '-' +hero_json[i]['cname']+ '-' +skin_names[cnt] + '.jpg'
        skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'+str(hero_json[i]['ename'])+ '/' +str(hero_json[i]['ename'])+'-bigskin-' + str(cnt+1) +'.jpg'
        urllib.request.urlretrieve(skin_url, save_file_name)


效果如下:
在这里插入图片描述

至此,所有的皮肤海报都已经爬取下来了。
附上完整代码如下:

# time:2023/5/25 22:11
# developer: 20222108 Dollar

import urllib.request
import json
import os

response = urllib.request.urlopen("http://pvp.qq.com/web201605/js/herolist.json")

hero_json = json.loads(response.read())
hero_num = len(hero_json)

# 文件夹不存在则创建
save_dir = 'D:\heroskin\\'
if not os.path.exists(save_dir):
    os.mkdir(save_dir)

for i in range(hero_num):
    # 获取英雄皮肤列表
    skin_names = hero_json[i]['skin_name'].split('|')

    for cnt in range(len(skin_names)):
        save_file_name = save_dir + str(hero_json[i]['ename']) + '-' + hero_json[i]['cname'] + '-' + skin_names[
            cnt] + '.jpg'
        skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(
            hero_json[i]['ename']) + '/' + str(hero_json[i]['ename']) + '-bigskin-' + str(cnt + 1) + '.jpg'

        if not os.path.exists(save_file_name):
            urllib.request.urlretrieve(skin_url, save_file_name)

最后将代码提交到码云,如图
在这里插入图片描述
演示视频以及一些说明如下:

爬虫相关讲解及演示

3. 实验过程中遇到的问题和解决过程

  • 问题1:玩王者的人其实都知道,目前廉颇不止两款皮肤,而应该是四款,所以刚刚这张图片是有一定的问题的。
    在这里插入图片描述
  • 问题1尚未解决,还在思考中。

全课总结

一开始主要是因为大创和CTF经常要使用Python语言,于是就选了王老师的课程。从安装Pycharm,学习print()函数,到列表元组字典集合,再到封装、继承、多态三巨头,无论是简单的随机random还是复杂的socket,随着知识的深入学习,Python的魅力也逐渐展现在我眼前。
初次接触Python,刚学习一学期的我可能提不出多么一针见血的宝贵建议,但是我希望强哥多强调复习的重要性。刚接触的时候,我常常觉得这门语言不用指针,相对简单一些,所以缺少了必要的复习,而每次的内容又很丰富,得不到及时的消化会导致接下来的学习相对吃力。如果多多强调课后的复习,相信学弟学妹们会学得更好。
最后,肯定要感谢王老师一学期来的教导和陪伴。所谓师傅领进门,修行在个人,今后的学习还需要自己的不断钻研。相信我在课堂上学到的,绝不止知识点,而是更多需要在日后生活中自己慢慢感悟的东西。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值