用qss 来控制qlabel显示字体的位置_用Python开发电影客户端

简介

本项目是用Python开发的影视客户端,具有增删改查、下载资源和数据可视化等功能。

本项目的主要技术步骤包括:

  1. 基于Python爬虫的数据获取:通过Python的Requests库和re库实现网络爬虫,获取数据。
  2. 基于Excel和Navicat的数据处理:使用Excel和Navicat对获取到的数据进行数据清洗、数据加工等数据处理。
  3. 基于PyQt的图形用户界面开发:使用PyQt库和Qt Designer进行图形用户界面开发,再用QSS对图形用户界面进行改善。
  4. 基于PyQt的数据操作与可视化:建立图形用户界面与后台数据库的连接,通过PyQt库操作数据库,实现客户端相关功能。

下面,首先展示客户端各功能的测试效果,再讲解各个技术步骤。目录如下:

  1. 各功能的测试效果
  2. 基于爬虫的数据获取
  3. 基于Excel和Navicat的数据处理
  4. 基于PyQt的图形用户界面开发
  5. 基于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 浏览影库

点击左侧菜单区的“浏览影库”按钮,可以在右下侧结果区看到数据库中所有影视数据的信息。浏览影库的效果如图所示:

672dcea4d7c636db78110ba6de92b5bd.png
浏览影库的效果

1.3 条件查询

点击“条件查询”,将弹出输入对话框,用来获取用户输入。输入影片名称的相关信息,如“中”字,点击“OK”开始查询。输入对话框如图所示:

92f267d9878df3c1be63b87fff5503af.png
输入对话框

可以在结果区中看到“片全名”中包含“中”字的所有数据,如图所示:

64f5a0841d14e8f0bc8a5cceb48f55d5.png
“片全名”中包含“中”字的所有数据

1.4 下载

当用户复制下载链接后,点击下载按钮,可以调用迅雷进行影片下载。在迅雷程序下载界面中,可以设置影片文件名、存储路径等信息。下载界面如图所示:

8c728017df6f463396513a0a10d19cf7.png
下载界面

而当用户复制的内容不是下载链接时,客户端会弹框提示用户正确复制下载链接后,再使用下载功能。下载提示如图所示:

df8885de17f00d65e356f8f365a4505c.png
下载提示

1.5 增加影片

当用户进行查询后,结果区会显示相应数据,此时用户可以将光标定位到结果区表格中的特定行,点击“增加影片”按钮,则会在该行前插入一行,用户可以输入符合数据表字段约束的影片数据。增加影片的效果如图所示:

34dfca2acb4a73b4b452f1949b0574d5.png
增加影片的效果

1.6 删除影片

当用户进行查询后,结果区会显示相应数据,此时用户可以将光标定位到结果区表格中的特定行,点击“删除影片”按钮,则会删除该行,且操作不可撤消。被删除的行最前的列号会显示为感叹号,表示已删除影片。删除影片的效果如图 所示:

b99b3ee418069837b9c88d0f08dd5618.png
删除影片的效果

1.7 可视化

当用户点击“可视化”按钮,结果区会显示相应的图表,将数据库中的数据在某维度上的信息,通过可视化的图表形式呈现给用户。可视化的效果如图所示:

d597b591e4f6b157d1776069798ec928.png
可视化的效果

2. 基于爬虫的数据获取

本项目的数据来源是通过爬虫爬取电影网站“电影天堂”的“最新影片”模块收集的。

爬取单部影视作品的发布时间、译名、片名、年代、产地、类别、语言、片长和下载地址等数据。

爬虫的实现主要有3步:确定爬虫网址、定位数据和保存数据。

2.1 确定爬虫网址

通过研究网址的组成,可发现网址规律。

每页网址组成为:www.ygdy8.net/html/gndy/dyzz/list_23_ + 页码 + .html

76185ff38e5049cbd73e825678f5f6a1.png
每页网址

单部电影网址后部分类似于:/html/gndy/dyzz/20190427/58502.html,可以通过增加“电影天堂”网址前部分“www.ygdy8.net”组装成完整的单部电影网址

0ca6600b3b24fccf53372ae64b7b018e.png
每条电影网址

2.2 定位数据每条电影网址

通过查看网页源代码和正则表达式re库匹配相应的数据。

以定位获取网页上“片名”的信息为例。首先进入到特定“电影详情页面”网址中,查看网页源代码,找到“片名”信息在网页源代码中的位置。以下图为例,例子如图所示:

adc54e06a1842bbef02fb5834dbbf10d.png
网页源代码

图中可以看到“片名”信息为“◎片  名 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的数据处理

由于爬虫目标网页的不规范和爬虫策略的不足,导致获取的数据质量不高,存在诸如乱码、值错位、值缺失等问题。

532d6e3cfed49082a4e41848a8d42fe7.png
未处理的数据

可用Excel进行数据清洗,删除空值行、错误值、重复值等,再用Navicat进行数据加工,导入数据库、合并字段、新增字段等。完成数据处理后的数据效果如下。

6e9cc36af05887ea8580207a675aeaa6.png
处理后的数据

4. 基于PyQt的图形用户界面开发

Qt是一套跨平台的C ++库,提供大量访问桌面系统和移动系统的高级API。涉及到多个方面,如UI开发等。而PyQt是Qt的一套全面的Python绑定,能够用于图形用户界面的开发。

通过QtWidgets.QSplashScreen设置程序启动界面

6a7ae71a2b71873748505dfb24ab852c.png
程序启动界面

通过布局和组件设置,得到基本的程序主页界面

9c6f93f4bed7a129e9c283bf9980907d.png
程序主页界面

再通过类似CSS语言的QSS语言改善界面

b34e4552e6f95b952d79a512d2c00b5b.png
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显示在图形用户界面上。

数据库中各影片的“年份”分布情况如图:

d597b591e4f6b157d1776069798ec928.png
数据库中各影片的“年份”分布情况
def 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值