| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 基于推荐算法的电影系统——具体实现(3) -> 正文阅读 |
|
[数据结构与算法]基于推荐算法的电影系统——具体实现(3) |
效果预览本项目目的是从猫眼读取数据,搭建一个电影网站,向用户推荐可能感兴趣电影。 Web管理员后端界面展示 电影推荐系统——用户界面展示 本章介绍具体实现过程。 普通用户在普通用户网页实现中,重点在于如何根据给定数据生成多个网页,本设计采用Flask自带的jinja模板渲染模块实现。其次是评论功能,点击评论,弹出一个模态框,发表完评论后,可以在右侧看到自己刚发表的评论。 电影详情页首先定义一个静态模板页面,对于要显示的信息分别定义变量,且引用类型为data.name。因此在后端向前端传数据时数据类型是字典类型,因此在前端定义变量时要注意变量的书写。当点击电影首页的详情时,调用url ”/template”,该路由绑定template()函数,在该函数中,首先从前端获取数据—电影名称,然后去存储空间中获取该电影的各种信息,将这些信息存储在字典中,然后调用Jinja模板render_template(‘templat.html’,data=data)其中templa.html就是前面设计的模板文件,而data是一个字典,就是要在前端显示的信息。最终实现效果如图所示。 评论评论发表完在右侧实现,本设计采用的是bootstrap table实现,表格共3列,分别显示用户ID、用户昵称和用户发表的评论。在第三章数据库设置中,在评论表格中,主键为(用户ID,电影名),因此如果一个用户对同一个电影发表多次评论,系统只会保存最近一次的评论。
当点击提交评论时,会触发insert()函数,获取到用户评论的信息,发起请求将电影名和评论信息一起通过Ajax异步传送到后端,如果请求成功,即表示已经完成了数据库操作,则页面提示发表成功,同时更新评论区。 管理员boostrap table初始化管理员界面实现动态只需要对数据库进行操作,在前面讲过使用boostrap table进行信息管理十分方便,在前面只需要定义一行代码即可解决。关于表的初始化即表的各列名称、最多显示行数等都在js代码里完成,主要参数如下:
首先url是表格请求数据源的路由,该路由绑定一个函数,函数和数据库进行连接,并执行相关操作后,将得到的数据返回,用于显示在表格中。Datatype表示返回的数据类型是json类型,bootstrap table自带搜索等功能,但是本设计考虑到页面的美观性,选择使用自定义查询。pagination设置的是前端分页还是后端分页,前端分页是指一次性从后端将数据取到前端,然后一页一页显示;而后端分页则是指,每次前端根据页号从后端取一页的数据,考虑到我们的数据量并不大,所以采用前端分页,一次性取所有数据。ClickToSelect为单击某一行时,是否选中,由于电影信息管理员需要做修改,因此选择true。 boostrap table查询对于自定义查询,需要将输入的查询参数传输到后端,因此就需要用到boostrap table里的参数。请求服务器数据时,通过重写参数的方式添加一些额外的参数,例如 toolbar 中的参数 如果queryParamsType = ‘limit’ ,返回参数必须包含limit, offset, search, sort, order ,queryParamsType = ‘undefined’, 返回参数必须包含: pageSize, pageNumber, searchText, sortName, sortOrder. 返回false将会终止请求,这里的params是table提供的。
定义一个输入框id为“mv_name”,将该输入框输入的值传给后端进行查询,并将查询结果返回到前端显示。在更新表格时,需要注意的是需要加上这行代码,将之前的表格先销毁,才能进行更新。$(’#table’).bootstrapTable(‘destroy’); 模态框在对表格进行添加和修改操作时,需要弹出一个模态框,在模态框中输入我们需要添加或修改的内容,然后传到后端进行更新。向后端传递模态框数据时通过KaTeX parse error: Expected 'EOF', got '#' at position 3: ('#?i_mv').val()获取,…(’#i_mv’).val(mv_name)实现。 爬虫获取电影信息爬虫程序实现爬取猫眼电影top100榜的爬虫程序,首先就需要获得猫眼电影的top100榜的网页信息,通过百度搜索可以得到其网页为 初步分析爬虫获取的网页后,发现网页信息并不全面,例如电影的类型就无法在这个网页获得,因此必须爬取电影本身的页面,从中获取电影的类型,但这无疑会加大工作量,并且可能会触发服务器防火墙,所以就引出了模拟浏览器的操作,后文会介绍。通过对top100榜中的电影本身链接的剥离,获取电影的链接,再通过后续的爬虫程序爬取其类型信息。 网页分析获取到top100榜的十个网页之后,则需要对获取的网页进行进一步分析。首先,通过chrome对网页源代码进行分析,发现每个电影在同名的模块中,这就降低了爬取难度。使用beautifulsoup对网页进行解构,获取soup类型的容器,再用re包中的compile函数进行正则表达式匹配,获取我们想要的网页中的电影的信息,在获取信息后发现信息的格式并不尽如人意,因此再次使用re包,调用sub函数将获取的信息修剪成所需的格式,将过滤好的信息储存。 在分析top100榜的同时,针对每个电影的信息的爬取也在进行。从top100榜的页面剥离各个电影自身的网址之后,建立新的爬虫再去分别获取各个电影自身的网页信息,从中剥离出我们想要的电影的类型信息,和top100榜网页中获取的信息放在一起,将这些信息返回给主函数并写入文件中以便后续使用。 模拟用户因为疫情原因,猫眼电影专业版的资源暂时不可以获得,因此不得不细分电影,使用爬虫从每个电影的主页上获取其类型,这个工作相对繁琐。而且由于猫眼电影本身服务器具有反爬机制,因此直接一次性爬取这些电影种类并不可取,所以爬虫机制必须添加一定的伪装,在失败了几次之后,决定使用等待机制模拟用户操作,也就是加入Python的休眠设置,引入time包,调用sleep函数,使得每次获取页面后等待20秒,再进行获取下一个页面的操作,借以模拟用户的操作。尽管这样确实大大的增长了程序运行的时间,但是确实将爬虫获取的数据大大增加,也不会过早的触发猫眼电影服务器的反爬取机制的注意,保证了爬取的顺利进行。 推荐算法基于用户的协同过滤算法步骤,在实现过程中考虑的是如何将其嵌入到前端中及时推荐给用户。ml-latest是一个有关movie 的数据集,数据包含138,000 个用户对27,000 个电影的评价,评价分为0-5。本设计使用该数据集进行推荐算法的编写,将验证成功的算法用户电影交流平台的构建。 首先导入pandas包,读取用户对电影的评价信息,然后读取电影信息,通过电影的movie_id对读取的两个数据集进行合并,并保存合并的数据集方便后面分析使用,该数据存储的是每个用户对电影的评价和评分。读取该数据,将用户对电影的评分保存在字典data中。计算所有用户之间的相似度,因此不同用户评价的电影大不相同,因此找出用户共同评价过的电影,基于此计算两个用户的欧式距离,使用该距离衡量两个用户的相似度,即距离越小,相似度越大。最后选取相似度最大的用户,找出该用户看过的所有电影,将目标用户没看过的电影推荐给目标用户,推荐算法结束。
总结1、动态生成每个电影详情页,调用Flask的Jinja模板传入相关数据实现。 详细代码可见:此处 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 14:46:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |