Python爬虫大作业(仿虎牙直播客户端)


公开声明

更新于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榜单功能展示↓
    英雄联盟分类下人气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

[更改直播分区]

  1. 如果想要更改默认选取的三个分区,可以前往虎牙的网站查看想更改的分区的编号,并更改代码相应部分。
  2. 如当想要选择“炉石传说”时,在地址栏找到对应编号,此处为“993”,其它分区同理。
    在这里插入图片描述
  3. 在代码的520行左右找到game1Url,并更改其内容中的gameId=后面的那些编号,改成上一步复制的编号,随后在下方games处更改对应的分区名字即可
    在这里插入图片描述
  4. 最终效果如图
    在这里插入图片描述

附件

代码及文件:代码及附件(付费资源)

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值