公开声明
更新于2023-09-14
由于现在我已经毕业了,本着以方便大家完成期末作业或是大作业答辩,现在打算把这个项目免费公开给大家使用,希望对大家有所帮助。
最后,十分感谢之前付费购买了我的资源的兄弟朋友们,你们当初对我的支持我感激不尽!
作品链接
提取码:1024
MD5: 4ce2773580f16e0f24dee55de48300ad
免责声明
- 本文提供的内容仅用于个人学习、研究或欣赏。我不保证内容的正确性。
- 访问者可将本文提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯作者本人及相关权利人的合法权利。
- 转载请注明出处。
用户必看
2023-09-14更新
- 还有一些小改动,请查看文章后面部分内容
2022-11-27更新
- 在【四、作业实现成果】下,新增了【代码更新】,修复了一些原因引起的bug,该bug曾导致部分直播间的标题异常丢失。
2022-12-10更新
- 在【四、作业实现成果】下,新增了【更新直播分区】,可以使得已购买用户根据自身需要更改直播的内容分区。
2023-04-20更新
- 有反馈称出现如下图所示的错误提示,
这是由于我在编写相关代码时使用的Python版本是3.9.x的,而matplotlib版本变动导致这个函数的调用方式发生了一点变化,解决方法是在相关代码的前面添加(.manager)字段,如下图所示
涉及的改动共有三处,大致位置分别位于120行、207行和247行,善用查找功能会让你的效率更高。(canvas.set_window_title)
以下是正文内容:
一、大作业要求
结合所选专业方向(信息处理、嵌入式、人工智能、大数据处理),用所学Python技术设计并实现一个与专业方向技术相关的、功能完整的系统,并撰写总结报告。
实现要求:
(1)实现涵盖以下技术:
- 图形界面、
- 多线程、
- 文件操作、
- 数据库编程、
- 网页爬虫、
- 异常处理。
A可侧重于应用系统,结合爬虫丰富系统功能,提升用户体验。
B可考虑实现物联网。
C可侧重于爬取网站图片,并进行图形或图像识别。
D可侧重于基于爬虫进行数据采集,并进行数据的统计分析。
(2)系统具有一定复杂度。爬取图片不少于500张。采集数据不少于1000条,统计分析的目标不能少于3个。其中每项均可根据需求进行增添或删减。
二、设计方案
1、设计了虎牙主页的爬虫,包括直播间封面、主播名、人气、直播间标题、主播id、主播房间号等信息。
另附虎牙直播分类页面进行对比查阅:虎牙直播分类
2、使用python3实现爬取数据,使用sqlite3模块进行数据存储,本地化存储,不需要额外安装数据库软件,但相应的不能可视化操作数据库内容;使用plt模块进行数据的绘图,使用tkinter模块实现界面。
3、通过tkinter的绑定事件,实现了单击列名可使列表按字符升序(降序)排列;实现了单击某一主播会在软件主页面更新页面图片,双击时会在浏览器打开该主播的直播间;实现了快捷键绑定,如F5刷新列表,Ctrl+F聚焦搜索框;实现了主播列表里的搜索功能,可通过Ctrl+F快捷键快速搜索;实现了单击页面图片可在浏览器跳转到对应主播的直播间
三、开发工具
- Windows 10 操作系统
- Visual Studio 2022 Community(2017发行版及以上)
- Python3开发环境(我所使用的版本号为3.9.5)
- matplotlib(pip install matplotlib --user)
- requests(pip install requests–user)
- lxml(pip install lxml --user)
- PIL(pip install pillow --user)
四、作业实现成果
-
英雄联盟分类下的运行界面↓
-
切换游戏列表为穿越火线分类下的运行界面↓
-
人气范围统计图功能展示↓
-
人气对比图功能展示↓
-
英雄联盟分类下人气Top10榜单功能展示↓
-
主播列表按"主播"列字符降序排列↓
-
主播列表按"人气"列浮点数降序排列↓
-
单击单个主播功能展示↓
代码说明
运行代码前需要更改图中所示的变量,确保路径有效,文件存在,否则运行会报错。
代码更新
已经购买了资源的各位,请在代码的第342行左右找到这两个函数,复制以下代码并粘贴替换掉原来的几行。(不修改不影响使用,只是有些直播间的标题会缺失,除此之外的功能都一切正常。)
def listUpdate(self, *args):
# 更新列表,获取当前列表的成员,根据菜单栏中的字符串对比字典得到对应游戏的主播列表
# 清空列表并将主播列表中的主播逐个添加
if args:
gameiList = gamesDict[games[args[0]]]
else:
gameiList = gamesDict[slbarVal.get()]
clearTreeview(tree)
for i in gameiList:
if(i['roomName']):
newItem = [i['nick'], i['totalCount'], i['roomName'], i['uid'], i['privateHost']]
else:
newItem = [i['nick'], i['totalCount'], i['introduction'], i['uid'], i['privateHost']]
tree.insert('', END, value=newItem)
def initList():
for i in game1List:
if(i['roomName']):
newItem = [i['nick'], i['totalCount'], i['roomName'], i['uid'], i['privateHost']]
else:
newItem = [i['nick'], i['totalCount'], i['introduction'], i['uid'], i['privateHost']]
tree.insert('', END, value=newItem)
运行代码需要确保代码所需的包都已经下载,方式是
python3
pip install xxxxx
[更改直播分区]
- 如果想要更改默认选取的三个分区,可以前往虎牙的网站查看想更改的分区的编号,并更改代码相应部分。
- 如当想要选择“炉石传说”时,在地址栏找到对应编号,此处为“993”,其它分区同理。
- 在代码的520行左右找到game1Url,并更改其内容中的gameId=后面的那些编号,改成上一步复制的编号,随后在下方games处更改对应的分区名字即可
- 最终效果如图
附件
代码及文件:代码及附件(付费资源)