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
    评论
当涉及到Python爬虫作业代码时,通常会涉及以下几个方面: 1. 网页请求:使用Python的requests库发送HTTP请求,获取网页内容。 2. 解析网页:使用Python的BeautifulSoup库或者lxml库解析HTML或XML格式的网页内容,提取所需的数据。 3. 数据存储:将提取到的数据保存到本地文件或者数据库中,常用的库有csv、json、sqlite等。 4. 数据清洗与处理:对提取到的数据进行清洗和处理,例如去除空白字符、去除重复数据、格式转换等。 5. 反爬虫处理:处理网站的反爬虫机制,例如设置请求头、使用代理IP等。 6. 多线程或异步处理:提高爬取效率,可以使用Python的多线程或异步库,如threading、asyncio等。 下面是一个简单的示例代码,用于爬取豆瓣电影Top250的电影名称和评分: ```python import requests from import BeautifulSoup def get_movie_info(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36' } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') movie_list = soup.find_all('div', class_='hd') for movie in movie_list: title = movie.a.span.text rating = movie.parent.find('span', class_='rating_num').text print(f'电影名称:{title},评分:{rating}') def main(): for i in range(0, 250, 25): url = f'https://movie.douban.com/top250?start={i}' get_movie_info(url) if __name__ == '__main__': main() ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值