Python电影项目并连数据库的登录系统

目录

        1.项目架构

        1.1介绍

        1.2系统架构

        1.3所需依赖包

        2.项目的使用

        3.项目效果图

        3.1登录界面(login_ui.py):

        3.2点击注册,跳转去注册界面(register_ui.py )

        3.3 movie_util.py文件主要功能是抓取和读取电影数据

         3.4 点击历史电影搜索:

         3.5 在映电影搜索

         3.6 统计图

        4.总结


1.项目架构

1.1介绍

一个基于爬虫技术的海量电影数据分析+登录、注册界面连接Mysql系统

1.2系统架构

dao
  |-- __init__.py
  |-- movie_dao.py              # 电影dao层接口类
  |-- login_dao.py                # 用户dao层接口类
ui 
  |-- __init__.py
  |-- register_ui.py               # 注册界面
  |-- login_ui.py                   # 登录界面
  |-- movie_ui.py                 # 电影主界面
data
  |-- __init__.py        
  |-- movies_tablets.csv      # 电影表格数据
  |-- moviesBoxOffice.csv   # 历史电影数据
  |-- recentlyMovies.csv     # 在映电影数据
  |-- top10_data.csv           # 电影前十数据
  |-- top_movie.csv            # 电影排名数据
utils
  |-- __init__.py
  |-- db_helper.py              # dbhelper帮助类
  |-- movie_util.py             # 电影排行榜和关键字查询电影接口定义
  |-- pyec.py                     # 电影排行榜和关键字查询电影接口定义
main.py                          # 运行程序入口

1.3所需依赖包

numpy:Python中基于数组对象的科学计算库。

pandas:Python的一个数据分析包,该工具为解决数据分析任务而创建。

requests:Python中常用的HTTP库,它提供了方便的HTTP请求和响应处理功能。

json:json模块提供了处理JSON数据的强大工具。

sklearn:Scikit-learn(sklearn)是机器学习中常用的第三方模块。

webbrowser:使用默认浏览器。

tkinter:Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。

collections:Python内建的一个集合模块,提供了许多有用的集合类和方法。

pyecharts: 一个基于 ECharts 的 Python 数据可视化库,它允许用户使用 Python 语言生成各种类型的交互式图表和数据可视化。

re:re模块进行正则表达式匹配的方法和语法。

2.项目的使用

运行ui中的login_ui.py即可

3.项目效果图

3.1登录界面(login_ui.py):

调用了login_dao.py中的函数(user_login:登录验证)

    def user_login(self, username: str, password: str):# 创建db数据库db = db_helper()# sql语句sql = "select * from t_user where luser = %s and lpwd = %s"# 占位符values = [username, password]# 调用db中的添加函数inserts = db.execute_query(str(sql), values)# 检查结果if inserts:print("登录成功!")return 1else:print("登录失败,密码或者账号错误")return 0

3.2点击注册,跳转去注册界面(register_ui.py )

    def do_search_kw(self):# 销毁当前窗口self.root.destroy()# 打开新窗口from ui.register_ui import register_uire = register_ui()re.show()

3.3 movie_util.py文件主要功能是抓取和读取电影数据

(1)recently()

这一函数主要是抓取最近上映票房排名前十名的电影信息。

url = "https://ys.endata.cn/enlib-api/api/movie/getMovie_BoxOffice_Day_Chart.do"header = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36',
"Cookie": 'JSESSIONID=b2685bfa-aa4f-4359-ae96-57befaf8d1ec; route=4e39643a15b7003e568cadd862137cf3; Hm_lvt_82932fc4fc199c08b9a83c4c9d02af11=1649834963,1649852471,1649859039,1649900037; Hm_lpvt_82932fc4fc199c08b9a83c4c9d02af11=1649917933'
}post_BoxOffice_Day_data = {'r': 0.7572955414768414,'datetype': 'Day','date': datetime.now().strftime('%Y-%m-%d'),'sdate': datetime.now().strftime('%Y-%m-%d'),'edate': datetime.now().strftime('%Y-%m-%d'),'bserviceprice': 1
} ```

以上代码块是运行爬虫前的准备工作,包含抓取的网址url、爬虫所需的请求头、请求时需要附带的数据。

python
res = requests.post(url, headers=header, data=post_BoxOffice_Day_data).text
json_data = json.loads(res)
data0 = json_data['data']['table0']
data1 = json_data['data']['table1']

以上代码块是运行爬虫并将其解析为json形式,方便后面对数据进行取出。

movie_rank = []
movie_details_MovieName = []
movie_details_BoxOffice = []
movie_details_ShowCount = []
movie_details_AudienceCount = []
movie_details_Attendance = []movie_percent_BoxOfficePercent = []
movie_percent_ShowCountPercent = []
movie_percent_AudienceCountPercent = []

以上代码是部分定义的所需的数据字段。

for i in range(10):movie_rank.append(data0[i]['Irank'])movie_details_MovieName.append(data0[i]['MovieName'])movie_details_BoxOffice.append(data0[i]['BoxOffice'])movie_details_ShowCount.append(data0[i]['ShowCount'])movie_details_AudienceCount.append(data0[i]['AudienceCount'])movie_details_Attendance.append(data0[i]['Attendance'])

以上是从json数据中取数据的过程。

top10_data = pd.DataFrame({"影片排名": movie_rank,"影片名称": movie_details_MovieName,"影片票房": movie_details_BoxOffice,"影片场次": movie_details_ShowCount,"影片人次": movie_details_AudienceCount,"上座率": movie_details_Attendance,"影片票房占比": movie_percent_BoxOfficePercent,"影片场次占比": movie_percent_ShowCountPercent,"影片人次占比": movie_percent_AudienceCountPercent,"一线城市票房": movie_city1_BoxOffice,"一线城市场次": movie_city1_ShowCount,"一线城市人次": movie_city1_AudienceCount,"二线城市票房": movie_city2_BoxOffice,"二线城市场次": movie_city2_ShowCount,"二线城市人次": movie_city2_AudienceCount,"三线城市票房": movie_city3_BoxOffice,"三线城市场次": movie_city3_ShowCount,"三线城市人次": movie_city3_AudienceCount,"四线城市票房": movie_city4_BoxOffice,"四线城市场次": movie_city4_ShowCount,"四线城市人次": movie_city4_AudienceCount,"其它票房": movie_others_BoxOffice,"其它场次": movie_others_ShowCount,"其它人次": movie_others_AudienceCount
})
print(top10_data)
top10_data.to_csv("data/top10_data.csv", encoding='gbk', index=False)

以上是定义数据表并将数据表填满,打印数据表,保存数据表的过程。

 

 3.4 点击历史电影搜索

# 历史电影数据def history(self):# showerror(title="失败", message="历史电影数据获取失败")if self.treeview is not None:self.clear_tree(self.treeview)  # 清空表格self.create_tree_history()self.btn_top2['text'] = '正在努力搜索'list = history(int(self.movie_num_entry.get()))self.add_tree(list, self.treeview)self.btn_top2['state'] = NORMALself.btn_top2['text'] = '历史电影搜索'
调用movie_util.py中的方法
def history(num:int):data = pd.read_csv("C:/Users/LoveB/PycharmProjects/pythonProject1/python/yy_movie//data/moviesBoxOffice.csv", encoding='gbk')data = np.array(data[:num]).tolist()print(data)return data

 

 3.5 在映电影搜索

# 在映电影搜索def showing(self):# showerror(title="失败", message="系统爬虫失效或超时,请联系系统开发者")if self.treeview is not None:self.clear_tree(self.treeview)  # 清空表格self.create_tree_showing()self.btn_top['text'] = '正在努力搜索'showing(int(self.movie_num_entry.get()))list = np.array(pd.read_csv("C:/Users/LoveB/PycharmProjects/pythonProject1/python/yy_movie/data/recentlyMovies.csv", encoding='gbk')).tolist()self.add_tree(list, self.treeview)  # 将数据添加到tree中self.btn_top['state'] = NORMALself.btn_top['text'] = '在映电影搜索'
def showing(num: int):header = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36',"Cookie": 'JSESSIONID=edf01a0d-deae-4143-9071-2e7eda2c5055; route=4e39643a15b7003e568cadd862137cf3; Hm_lvt_82932fc4fc199c08b9a83c4c9d02af11=1649859039,1649900037,1649983572,1649988152; Hm_lpvt_82932fc4fc199c08b9a83c4c9d02af11=1650016413'}url_total = "https://ys.endata.cn/enlib-api/api/movie/getMovie_BoxOffice_Day_List.do"total_post_data = {'r': 0.08330054546930543,'datetype': 'Day','date': datetime.now().strftime('%Y-%m-%d'),'sdate': datetime.now().strftime('%Y-%m-%d'),'edate': datetime.now().strftime('%Y-%m-%d'),'bserviceprice': 1,'columnslist': '100,102,103,119,105,107,109,106,112,129,142,143,163,164,165','pageindex': 1,'pagesize': 20,'order': 103,'ordertype': 'desc',}total_res = requests.post(url_total, headers=header, data=total_post_data).texttotal_json_data = json.loads(total_res)pagesize = total_json_data['data']['table2'][0]['TotalCounts']total_post_data = {'r': 0.08330054546930543,'datetype': 'Day','date': datetime.now().strftime('%Y-%m-%d'),'sdate': datetime.now().strftime('%Y-%m-%d'),'edate': datetime.now().strftime('%Y-%m-%d'),'bserviceprice': 1,'columnslist': '100,102,103,119,105,107,109,106,112,129,142,143,163,164,165','pageindex': 1,'pagesize': pagesize,'order': 103,'ordertype': 'desc',}total_res = requests.post(url_total, headers=header, data=total_post_data).texttotal_json_data = json.loads(total_res)['data']['table1']print(total_json_data)print('total=',len(total_json_data))movies_rank = []movies_MovieName = []movies_BoxOffice = []movies_ReleaseDate = []movies_TotalBoxOffice = []movies_ShowCount = []movies_AudienceCount = []movies_BoxOfficePercent = []movies_ReleaseDay = []movies_ShowDay = []movies_HjBoxOffice = []movies_HjShowCount = []movies_HjBoxOfficePercent = []movies_HjShowCountPercent = []movies_HjAudienceCountPercent = []movies_MaoYanWantToSee = []movies_TaoPiaoPiaoWantToSee = []movies_DouBanWantToSee = []for i in range(num):if total_json_data[i]['EntMovieID'] != 0:movies_rank.append(total_json_data[i]['Irank'])movies_MovieName.append(total_json_data[i]['MovieName'])movies_BoxOffice.append(total_json_data[i]['BoxOffice'])movies_ReleaseDate.append(total_json_data[i]['ReleaseDate'])movies_TotalBoxOffice.append(total_json_data[i]['TotalBoxOffice'])movies_ShowCount.append(total_json_data[i]['ShowCount'])movies_AudienceCount.append(total_json_data[i]['AudienceCount'])movies_BoxOfficePercent.append(total_json_data[i]['BoxOfficePercent'])movies_ReleaseDay.append(total_json_data[i]['ReleaseDay'])movies_ShowDay.append(total_json_data[i]['ShowDay'])movies_HjBoxOffice.append(total_json_data[i]['HjBoxOffice'])movies_HjShowCount.append(total_json_data[i]['HjShowCount'])movies_HjBoxOfficePercent.append(total_json_data[i]['HjBoxOfficePercent'])movies_HjShowCountPercent.append(total_json_data[i]['HjShowCountPercent'])movies_HjAudienceCountPercent.append(total_json_data[i]['HjAudienceCountPercent'])post_data = {'r': 0.3270070971758279,'entmovieid': total_json_data[i]['EntMovieID']}res = json.loads(requests.post(url="https://ys.endata.cn/enlib-api/api/movie/getMovie_HeadBoxOfficeByMovieID.do",headers=header, data=post_data).text)print(total_json_data[i]['EntMovieID'])print(res)movies_MaoYanWantToSee.append(res['data']['table0'][0]['MaoYanWantToSee'])print(movies_MaoYanWantToSee)movies_TaoPiaoPiaoWantToSee.append(res['data']['table0'][0]['TaoPiaoPiaoWantToSee'])movies_DouBanWantToSee.append(res['data']['table0'][0]['DouBanWantToSee'])total_data = pd.DataFrame({"排名": movies_rank,"影片名称": movies_MovieName,"当前票房": movies_BoxOffice,"上映日期": movies_ReleaseDate,"累计票房": movies_TotalBoxOffice,"当前场次": movies_ShowCount,"当前人次": movies_AudienceCount,"票房占比": movies_BoxOfficePercent,"累计上映天数": movies_ReleaseDay,"当前统计天数": movies_ShowDay,"淘票票想看数": movies_TaoPiaoPiaoWantToSee,"猫眼想看数": movies_MaoYanWantToSee,"豆瓣想看数": movies_DouBanWantToSee,"黄金场票房": movies_HjBoxOffice,"黄金场场次": movies_HjShowCount,"黄金场票房占比": movies_HjBoxOfficePercent,"黄金场场次占比": movies_HjShowCountPercent,"黄金场人次占比": movies_HjAudienceCountPercent})total_data.to_csv("C:/Users/LoveB/PycharmProjects/pythonProject1/python/yy_movie/data/recentlyMovies.csv", encoding='gbk', index=False)

 

 3.6 统计图

    def clicking(self):# showerror(title="失败", message="跳转在映电影数据分析失败")recently()from python.yy_movie.utils.pyec import ShowingShowing()webbrowser.open("C:/Users/LoveB/PycharmProjects/pythonProject1/python/yy_movie/在映电影分析.html")

 

4.总结

以上就是电影项目大致流程,更详细点击我的主页获取完整代码,如果对你有帮助,点赞关注评论一下呗~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/345949.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【内存管理】页表映射

页表的一些术语 现在Linux内核中支持四级页表的映射,我们先看下内核中关于页表的一些术语: 全局目录项,PGD(Page Global Directory) 上级目录项,PUD(Page Upper Directory) 中间目…

WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法

今天明月给大家分享一下 WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法的教程,在撰写【WordPress 高级缓存插件 W3 Total Cache Pro 详细配置教程】一文的时候明月就发现 W3 Total Cache 已经支持 Brotli 压缩算法了,可惜的是在安装完…

Three.js和Babylon.js,webGL中的对比效果分析!

hello,今天分享一些three.js和babylon.js常识,为大家选择three.js还是babylon.js做个分析,欢迎点赞评论转发。 一、Babylon.js是什么 Babylon.js是一个基于WebGL技术的开源3D游戏引擎和渲染引擎。它提供了一套简单易用的API,使开发…

Anzo 跟单社区现已正式上线!即刻体验无与伦比的强大功能

Anzo 跟单社区现已正式上线! ANZO 跟单社区是一个颠覆性的创新跟单社区平台,作为新一代跟单社区,我们旨在让更多的用户享受跟单交易带来的便捷性和收益性。交易者可以通过跟单社区,学习和分享交易策略,轻松复制交易专家的交易策略…

SpringCloud Gateway中Route Predicate Factories详细说明

官网地址:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#gateway-request-predicates-factories Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。 Spring Cloud Gateway …

python-微分方程计算

首先导入数据 import numpy as np from scipy.integrate import odeint from scipy.optimize import minimize import matplotlib.pyplot as pltdata np.array([[30, 4],[47.2, 6.1],[70.2, 9.8],[77.4, 35.2],[36.3, 59.4],[20.6, 41.7],[18.1, 19],[21.4, 13],[22, 8.3],[2…

Spring6

一 概述 1.1、Spring是什么? Spring 是一款主流的 Java EE 轻量级开源框架 ,Spring 由“Spring 之父”Rod Johnson 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发。从简单性、可测…

项目:基于httplib/消息队列负载均衡式在线OJ

文章目录 写在前面关于组件开源仓库和项目上线其他文档说明项目亮点 使用技术和环境项目宏观结构模块实现compiler模块runner模块compile_run模块compile_server模块 基于MVC结构的OJ服务什么是MVC?用户请求服务路由功能Model模块view模块Control模块 写在前面 关于…

UnityXR Interactable Toolkit如何实现Climb爬梯子

前言 在VR中,通常会有一些交互需要我们做爬梯子,爬墙的操作,之前用VRTK3时,里面是还有这个Demo的,最近看XRI,发现也除了一个爬的示例,今天我们就来讲解一下 如何在Unity中使用XR Interaction Toolkit实现爬行(Climb)操作 环境配置 步骤 1:设置XR环境 确保你的Uni…

HTML静态网页成品作业(HTML+CSS)—— 名人霍金介绍网页(6个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有6个页面。 二、作品演示 三、代…

Tomcat源码解析(八):一个请求的执行流程(附Tomcat整体总结)

Tomcat源码系列文章 Tomcat源码解析(一):Tomcat整体架构 Tomcat源码解析(二):Bootstrap和Catalina Tomcat源码解析(三):LifeCycle生命周期管理 Tomcat源码解析(四):StandardServer和StandardService Tomcat源码解析(五)&…

Seq2seq、编码器解码器神经网络

目录 一、Seq2seq 简介二、编码器三、解码器四、编码器-解码器的训练 遇到看不明白的地方,欢迎在评论中留言呐,一起讨论,一起进步! 需掌握的前提知识: LSTM、词嵌入 本文参考:【官方双语】编码、解码神经网…

在Cisco Packet Tracer上配置NAT

目录 前言一、搭建网络拓扑1.1 配置PC机1.2 配置客户路由器1.3 配置ISP路由器 二、配置NAT2.1 在客户路由器中配置NAT2.2 测试是否配置成功 总结 前言 本篇文章是在了解NAT的原理基础上,通过使用Cisco Packet Tracer 网络模拟器实现模拟对NAT的配置,以加…

C语言学习系列:GCC编译器Windows版本MinGW-w64的安装教程

本文图文分享如何安装C语言编译器——MinGW-w64。 只要看到这篇文章,就可以按照文中步骤正确安装MinGW-w64并使用。 一、什么是 MinGW-w64 ? 我们知道C语言是高级语言,必须编译为二进制文件,才能为计算机运行,MinGW…

二开版微交易系统

下载地址:二开版微交易系统

1035 插入与归并(测试点6)

solution 类型判断:插入排序中已排序的部分有序,未排序的和原数组元素相同;否则为归并排序测试点6:对于归并排序的子序列长度,不能简单视为前k个有序则子序列长度就是k 例如该测试用例的归并排序的子序列长度应该为2&…

2024海南省大数据教师培训-Hadoop集群部署

前言 本文将详细介绍Hadoop分布式计算框架的来源,架构和应用场景,并附上最详细的集群搭建教程,能更好的帮助各位老师和同学们迅速了解和部署Hadoop框架来进行生产力和学习方面的应用。 一、Hadoop介绍 Hadoop是一个开源的分布式计算框架&…

牛客java基础(一)

A 解析 : java源程序只允许一个public类存在 ,且与文件名同名 ; D hashCode方法本质就是一个哈希函数,这是Object类的作者说明的。Object类的作者在注释的最后一段的括号中写道:将对象的地址值映射为integer类型的哈希值。但hashCode()并不…

SQL Chat:从SQL到SPEAKL的数据库操作新纪元

引言 SQL Chat是一款创新的、对话式的SQL客户端工具。 它采用自然语言处理技术,让你能够像与人交流一样,通过日常对话的形式对数据库执行查询、修改、创建及删除操作 极大地简化了数据库管理流程,提升了数据交互的直观性和效率。 在这个框…

【虚拟现实】一、AR与VR的基本原理

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 增强现实(AR)和虚拟现实(VR)技术已经从科幻小说走入现实&#xf…