简介
本项目是用Python开发的影视客户端,具有增删改查、下载资源和数据可视化等功能。
本项目的主要技术步骤包括:
- 基于Python爬虫的数据获取:通过Python的Requests库和re库实现网络爬虫,获取数据。
- 基于Excel和Navicat的数据处理:使用Excel和Navicat对获取到的数据进行数据清洗、数据加工等数据处理。
- 基于PyQt的图形用户界面开发:使用PyQt库和Qt Designer进行图形用户界面开发,再用QSS对图形用户界面进行改善。
- 基于PyQt的数据操作与可视化:建立图形用户界面与后台数据库的连接,通过PyQt库操作数据库,实现客户端相关功能。
下面,首先展示客户端各功能的测试效果,再讲解各个技术步骤。目录如下:
- 各功能的测试效果
- 基于爬虫的数据获取
- 基于Excel和Navicat的数据处理
- 基于PyQt的图形用户界面开发
- 基于PyQt的数据操作与可视化
(阅读提示:若在浏览器上阅读,可使用Ctrl+F,输入相关章节标题,如“基于爬虫的数据获取”,快速定位到相应章节。)
1. 各功能的测试效果
客户端主要功能包括:浏览影库、条件查询、下载、增加影片、删除影片、可视化共6个功能。
1.1 测试环境
软件环境:Python 3.7.3,JetBrains PyCharm Edu 2019.1,Windows 10教育版
硬件环境:Intel(R) Core(TM) i5-4200H CPU @ 2.80GHz 8GB RAM
1.2 浏览影库
点击左侧菜单区的“浏览影库”按钮,可以在右下侧结果区看到数据库中所有影视数据的信息。浏览影库的效果如图所示:
1.3 条件查询
点击“条件查询”,将弹出输入对话框,用来获取用户输入。输入影片名称的相关信息,如“中”字,点击“OK”开始查询。输入对话框如图所示:
可以在结果区中看到“片全名”中包含“中”字的所有数据,如图所示:
1.4 下载
当用户复制下载链接后,点击下载按钮,可以调用迅雷进行影片下载。在迅雷程序下载界面中,可以设置影片文件名、存储路径等信息。下载界面如图所示:
而当用户复制的内容不是下载链接时,客户端会弹框提示用户正确复制下载链接后,再使用下载功能。下载提示如图所示:
1.5 增加影片
当用户进行查询后,结果区会显示相应数据,此时用户可以将光标定位到结果区表格中的特定行,点击“增加影片”按钮,则会在该行前插入一行,用户可以输入符合数据表字段约束的影片数据。增加影片的效果如图所示:
1.6 删除影片
当用户进行查询后,结果区会显示相应数据,此时用户可以将光标定位到结果区表格中的特定行,点击“删除影片”按钮,则会删除该行,且操作不可撤消。被删除的行最前的列号会显示为感叹号,表示已删除影片。删除影片的效果如图 所示:
1.7 可视化
当用户点击“可视化”按钮,结果区会显示相应的图表,将数据库中的数据在某维度上的信息,通过可视化的图表形式呈现给用户。可视化的效果如图所示:
2. 基于爬虫的数据获取
本项目的数据来源是通过爬虫爬取电影网站“电影天堂”的“最新影片”模块收集的。
爬取单部影视作品的发布时间、译名、片名、年代、产地、类别、语言、片长和下载地址等数据。
爬虫的实现主要有3步:确定爬虫网址、定位数据和保存数据。
2.1 确定爬虫网址
通过研究网址的组成,可发现网址规律。
每页网址组成为:www.ygdy8.net/html/gndy/dyzz/list_23_ + 页码 + .html
单部电影网址后部分类似于:/html/gndy/dyzz/20190427/58502.html,可以通过增加“电影天堂”网址前部分“www.ygdy8.net”组装成完整的单部电影网址
2.2 定位数据每条电影网址
通过查看网页源代码和正则表达式re库匹配相应的数据。
以定位获取网页上“片名”的信息为例。首先进入到特定“电影详情页面”网址中,查看网页源代码,找到“片名”信息在网页源代码中的位置。以下图为例,例子如图所示:
图中可以看到“片名”信息为“◎片 名 How To Train Your Dragon: The Hidden World/How to Train Your Dragon 3 <br />”。于是可以通过正则表达式来定位获取“片名信息”,代码为:
re.findall('片 名 (.*?) <br />', html2.text)
2.3 保存数据
爬取的数据会按序存放在movie_data列表中,再由writer对象的writerow方法,一行行地将movie_data列表中的元素写入csv(逗号分隔符)文件中,待后续进行数据处理,存入数据库中。具体代码如下:
writer.writerow(movie_data)
2.4 爬虫的完整代码
import
3. 基于Excel和Navicat的数据处理
由于爬虫目标网页的不规范和爬虫策略的不足,导致获取的数据质量不高,存在诸如乱码、值错位、值缺失等问题。
可用Excel进行数据清洗,删除空值行、错误值、重复值等,再用Navicat进行数据加工,导入数据库、合并字段、新增字段等。完成数据处理后的数据效果如下。
4. 基于PyQt的图形用户界面开发
Qt是一套跨平台的C ++库,提供大量访问桌面系统和移动系统的高级API。涉及到多个方面,如UI开发等。而PyQt是Qt的一套全面的Python绑定,能够用于图形用户界面的开发。
通过QtWidgets.QSplashScreen设置程序启动界面
通过布局和组件设置,得到基本的程序主页界面
再通过类似CSS语言的QSS语言改善界面
5. 基于PyQt的数据操作与可视化
通过PyQt的QtSql模块,配置和连接本地数据库,再根据其MVC(Model–View–Controller)模式,实现增删改查功能。接着调用迅雷实现下载功能。最后用PyQt的QtChart模块来生成图表,展示数据。
5.1 配置和连接数据库
本项目使用PyQt5的QtSql来操作数据库,而这需要相应的数据库驱动,才能连接相应的数据库上,从而进行相关的数据库操作。由于本项目使用的数据库为MySQL,所以先将通过文件拷贝,将MySQL安装路径下相关文件配置到PyQt5相关安装路径。配置好后,便可以开始连接MySQL。确定数据库驱动名称,设置主机名称、数据库名称、用户名和密码:
def
5.2 增删改查功能
根据PyQt的MVC模式,可通过模型来操作数据,实现数据的增删改查功能。
创建Model
5.3 下载功能
下载功能是通过监测剪切板的文本,当其满足一定条件后,可以调用迅雷程序进行下载。
监测剪切板文本
5.4 数据可视化
数据可视化是指通过可视化的方式,如图表等,展示数据库中数据的某些维度的信息。通过PyQt5的QtSql模块来读取数据,再用QtChart模块来生成图表,展示数据。
首先通过QtSql.QSqlQuery 装载SQL语句,进行查询。再通过遍历查询结果,将数据存在列表,作为图表的数据源。
然后通过QtChart.QBarSet和QtChart.QBarSeries设置图表的数据源,再用QtChart.QChart制作图表,再通过QChartView显示在图形用户界面上。
数据库中各影片的“年份”分布情况如图:
def