课程大作业
一、研究背景 1
二、豆瓣电影功能设计 2
三、豆瓣电影功能实现 3

一、研究背景
1.1 背景
省略了

二、豆瓣电影功能设计
2.1
一:收集信息功能设计
(1)获取数据
用python爬取豆瓣排行榜250的影片信息,包括影片排行名次、影片名字、影片导演、影片主演、影片上映年份、影片所属地区、影片类型、影片评分、影片评价人数、影片短评。爬取每部影片对应图片,并命名为影片名字。

(2)将数据存入mongodb
将影片信息命名为“豆瓣Top250.csv”,将CSV文件导入mongodb,运用第十章第一节数据的导入导出知识点。

(3)数据展示
查询数据是否存入mongodb数据库中,运用第二章查询语言系统知识点。

二:信息管理功能设计
(1)python连接mongodb数据库。

(2)对数据进行增删查改操作,运用第四章增改删操作知识点。

(3)对数据进行分析,分析用户喜欢的电影和电影评分等信息,运用第六章聚集分析知识点。

(4)对分析所得数据进行复制集操作,运用第七章复制集知识点。

(5)文件上传与下载,运用第九章分布式文件存储系统知识点。

(6)对数据库进行备份,运用第十章管理与监控知识点。

三:信息展示功能设计
(1)网页搭建

使用Adobe Dreamweaver CS5写html文件
html文件包括:
index.html:网站主页
Grid.html:网站主体部分,显示排名较前的电影信息
Single-post.html:网站影片分析结果展示
About.html:网站其他内容,关于影片的一些信息,比如排行榜的由来、联系电话、电影其他信息。
网站中有按钮,让用户点击可以跳转到其他页面,用于界面切换。

(2)用户查看电影信息,分析结果展示

用户点开网址,即可看到网站信息。主界面为排名前几的影片及影片信息,包括影片名字和影片短评。
主界面中有个按钮,可以跳转到其他页面。当用户想要跳转界面了解其他信息时,可以点击此按钮。跳转界面包括主页,全部内容,关于我们和影片分析。其中主页为用户打开页面呈现内容,全部内容为排行榜前四十的影片内容,关于我们为与影片相关内容,影片分析为运用python和mongodb对数据进行分析结果的展示页面。
若用户想要联系网站,有个按钮,用户点击按钮跳出发送邮件界面,用户输入用户名和用户邮件地址和邮件内容,点击下方按钮即可发送邮件给网站。

三、豆瓣电影功能实现
3.1 运行环境
Python3 、mongodb 、windows10、Adobe Dreamweaver CS5
3.2 具体实现
一、收集信息功能实现
(1)python爬取数据主要代码,代码文件为“爬虫豆瓣Top250.py”

for li in lis:
        name = li.xpath(".//a/span[@class='title'][1]/text()")[0]
director_actor="".join(li.xpath(".//div[@class='bd']/p/text()[1]")[0].replace(' ','').replace('\n','').replace('/','').split())
info="".join(li.xpath(".//div[@class='bd']/p/text()[2]")[0].replace(' ','').replace('\n','').split())
rating_score=li.xpath(".//span[@class='rating_num']/text()")[0]
rating_num=li.xpath(".//div[@class='star']/span[4]/text()")[0]
introduce = li.xpath(".//p[@class='quote']/span/text()")
if introduce:
            movie = {'name': name, 'director_actor': director_actor, 'info': info, 'rating_score': rating_score, 'rating_num': rating_num, 'introduce': introduce[0]
        else:
            movie = {'name': name, 'director_actor': director_actor, 'info': info, 'rating_score': rating_score,'rating_num': rating_num, 'introduce': None}
        imgurl = li.xpath(".//img/@src")[0]
        movies.append(movie)
        imgurls.append(imgurl)

(2)导入数据库

在这里插入图片描述

(3)数据展示
使用查询语句,查看数据库中数据是否导入成功,例如查找影片名为“肖申克的救赎”。

在这里插入图片描述

二:信息管理功能实现
(1)将python与mongodb连接,让python操作mongodb数据库。运用第九章分布式文件存储系统知识点中的连接数据库知识点。

from pymongo import MongoClient
#1.连接本地数据库服务
myclient=MongoClient('mongodb://localhost:27017/')
#2.连接本地数据库 
db=myclient.test
#3.创建集合
collection=db.douban

(2)对数据进行增删查改操作,运用第二章查询知识点和第四章增改删操作知识点。
1.删除语句操作:csv文件导入到数据库时,第一行的无效数据导入了数据库中,将无效数据进行删除。
result = collection.delete_one({‘name’:‘name’ })
print(result)
将数据删除后查询无效数据是否存在,若不存在则删除成功。由图可知,无效数据已被成功删除。
在这里插入图片描述

2.插入语句操作:插入新的影片信息“天气之子”,包括影片名字、影片导演、影片主演、影片上映年份、影片所属地区、影片类型、影片评分、影片评价人数、影片短评。

douban = {
    '_id': 250,
    'name': '天气之子',
    'director_actor': '导演:新海诚 主演:醍醐虎汰朗',
    'info':'2019/爱情/动画/奇幻',
    'rating_score':7.1,
    'rating_num':'191148人评价',
    'introduce': '拥有改变天气的其妙能力'
}
result = collection.insert_one(douban)
print(result)



在这里插入图片描述

  1. 修改语句操作:影片名为“肖申克的救赎”信息更新,评价人数由2040900变为2043207
condition = {'name': '肖申克的救赎'}
douban = collection.find_one(condition)
douban['rating_num'] = '2043207人评价'
result = collection.update_one(condition, {'$set':douban})
print(result)

由图可知信息更新完成

在这里插入图片描述

  1. 查询语句操作:查询排行榜前三名影片信息,分析排行高的原因。
results=collection.find({'_id':{'$lt':3}})
print(results)
for result in results:
print(result)

分析:
排行榜前三名影片为“肖申克的救赎”、“霸王别姬”、“阿甘正传”。这三部影片都是在九十年代产生,距今已经二十多年。这三部都属于经典影片,都是一个时代的缩影。这三部电影的演员在当时都是有名的影视演员,比如张国荣先生。可见观众比较喜欢的是经典影片,而不是比较当下比较有名的电影。

(3)对数据进行分析。运用第六章聚集分析知识点。
1.运用管道模式,将数据按照rating_score降序排列

cursor = db.douban.aggregate([{"$sort":{"rating_score":-1}}])
for document in cursor:
      print(document)

分析:
将电影按照评分进行降序排序,可以发现评分排名和排行榜排名不一致,所以评分高的电影排行榜名次不一定高,排行榜名次高也不代表电影评分高,这两者没有必然的联系。
对所属国家分类,可以发现评分较高的前十部的影片中,其中美国占比最大,有五部电影分别为:肖申克的救赎、控方证人、阿甘正传、辛德勒的名单、忠犬八公的故事。剩下的影片中其他国家相差不大,都有一两部上榜。中国大陆有一部电影为霸王别姬,意大利有一部电影为美丽人生。日本有两部电影为人生果实和千与千寻。法国有一部电影为这个杀手不太冷。
通过对影片所属国家的分析,可以看出人们普遍喜欢看美国的电影,评分最高的是“肖申克的救赎”,这部电影的主题是“对希望和自由的向往”,当今时代不可缺少的就是对自由、希望的向往,此电影也代表了人类对自由的渴望。

2.运用管道模式,统计不同评分个数

for i in range(0,15,1):
    j=0.1*i+8.3
    k=round(j,1)
    cursor=db.douban.aggregate(
    [
     {"$match":{"rating_score":k}}
     ]
)
    count=0    
    for document in cursor:
        #print(document)
        count=count+1
    print(k)
   
print(count)

分析:
通过结果可知8.3分1个,8.4分4个,8.5分14个,8.6分27个,8.7分41个,8.8分44个,8.9分30个,9.0分21个,9.1分20个,9.2分23个,9.3分13个,9.4分5个,9.6个2个,9.7分1个。通过数据可知影片评分类似服从正态分布,高分和低分影片数量较少,影片数量较多集中评分中间。

  1. 运用简单聚集函数,获取影片info信息
cursor=db.douban.distinct("info")
for document in cursor:
print(document)

分析:
影片类型中出现最多的是“犯罪/惊悚/悬疑”,可以发现观众比较喜欢看的电影类型是犯罪悬疑片,其次较多的是“爱情/喜剧”和“科幻/冒险”。一般犯罪悬疑片给人以紧张感,出现案件一步步进行破案,有时剧情还会不断反转,紧扣观众的视线有让观众看下去的欲望,所以犯罪悬疑片更得观众喜爱。

4.运用简单聚集函数,获取影片评分信息

cursor=db.douban.distinct("rating_score")
for document in cursor:
print(document)

分析:
影片评分集中分布在8.3到9.7之间,说明Top250榜中电影评分最低为8.3分,最高为9.7分。

5.运用简单聚集函数,获取影片短评。将影片短评信息保存在“豆瓣短评.pdf”文件中,用于文件上传下载。

cursor=db.douban.distinct("introduce")
for document in cursor:
    print(document)

分析:
每部影片的短评都描述了电影的特征或者电影所获得的成就,例如“风华绝代”、“香港浪漫主义警匪动作片的巅峰之作”。影片短评是概述电影最重要的东西,看到短评大概就知道电影主要描写了什么,或者电影讲了什么故事,电影获得了哪些成就。一部电影的短评是浓缩了电影的精华而形成的,通过短评就可以看出电影的价值所在,

(4)对分析得出的数据进行复制集操作
1.创建复制集中每个节点存放数据的目录、每个节点的日志文件、每个节点启动时所需的配置文件,创建复制集添加节点。

2.将排名前三的影片信息插入到复制集中,查看数据是否同步
在这里插入图片描述
在这里插入图片描述

(5)文件上传与下载
将分析保存的“豆瓣短评.pdf”文件信息上传到数据库中。将数据库中的“豆瓣短评.pdf”文件下载到本地。代码为:”文件上传下载豆瓣短评.py”

在这里插入图片描述

(6)对数据进行备份

在这里插入图片描述

查看数据是否备份成功:

在这里插入图片描述

三:信息展示功能实现
(1)网站搭建实现
第一步:新建文件夹“网站搭建成果展示”,将数据放入文件夹中,主要包括html文件、影片图片信息、网站搭建所需的css、fonts、imge、js等文件信息。
第二步:编写html文件
1.Index.html主页面编写内容:

<h1>Welcome to <em>douban</em></h1>
          <p>一部电影 一部人生</p>
          <p>每一部电影都让我们好像经历了另一种不同的人生,这是一种安全的奇妙的感觉。</p>
  1. Grid.html页面:主要内容为排名前40的电影信息
    例如:
    <a href="imge/肖申克的救赎.jpg" 
data-lightbox="image-1"><div class="hover-effect">
                                <div class="hover-content">
                                    <h1>肖申克的 <em>救赎</em></h1>
                                    <p>希望让人自由</p>
                                </div>
                            </div></a>
                            <div class="image">
                                <img src="imge/肖申克的救赎.jpg" width="70%" height="500">
  1. single-post.html页面:电影分析结果展示
    主要代码展示:
<li><a href="#">> 美国(5)部</a></li>
<li><a href="#">> 日本(2)部</a></li>
<li><a href="#">> 中国(1)部</a></li>
<li><a href="#">> 法国(1)部</a></li>
<li><a href="#">> 意大利(1)部</a></li>
 
<br>
                                      阿甘正传</p>
                                    <p>阿甘(汤姆·汉克斯 饰)于二战结束后不久出生在美国南方阿拉巴马州一个闭塞的小镇,他先天弱智,智商只有75,然而他的妈妈是一个性格坚强的女性,她常常鼓励阿甘&ldquo;傻人有傻福&rdquo;,要他自强不息。 <br>
  阿甘像普通孩子一样上学,并且认识了一生的朋友和至爱珍妮(罗宾·莱特·潘 饰),在珍妮和妈妈的爱护下,阿甘凭着上帝赐予的&ldquo;飞毛腿&rdquo;开始了一生不停的奔跑。 <br>
  阿甘成为橄榄球巨星、越战英雄、乒乓球外交使者、亿万富翁,但是,他始终忘不了珍妮,几次匆匆的相聚和离别,更是加深了阿甘的思念。 <br>
  有一天,阿甘收到珍妮的信,他们终于又要见面……<br>
                                      <br>                                 
  1. About.html页面:关于电影的一些其他信息
    主要代码:
<div class="more-about-us">
        <div class="container">
            <div class="col-md-5 col-md-offset-7">
                <div class="content">
                    <h2>电影的魅力</h2>
                    <p>我们的人生太短,电影能把我们的人生延长好几倍。<br>
                    经历一个未知的世界,体验一种全新的生活,感受一次心灵的穿越。</p>

(2)网站分析结果展示
1.single-post.html页面:电影分析结果展示
进入网站点击右上角按钮,找到“影片分析”选项,点击进入。用户即可看到前十排行榜国家比例、排行榜前三名信息
在这里插入图片描述
在这里插入图片描述

用户向下滑动,可以看到豆瓣Top250榜单前三电影剧情简介、热门短评以及评分个数统计等信息。
在这里插入图片描述

在这里插入图片描述

用户对网站若有意见,可以发送邮件,点击网站右下角信息图标,即可出现“Say hello to yourshelf”界面,用户可以通过此界面向网站写邮件。

在这里插入图片描述

  1. Index.html主页面展示
    用户打开网址界面呈现:
    在这里插入图片描述

用户向下滑动,查看排名前九的影片信息
在这里插入图片描述

当用户用鼠标触碰到影片时,出现影片短评。例如触碰“千与千寻”,出现影评“最好的宫崎骏,最好的久石让”。

当用户点击影片信息时,弹出影片图片,图片左右有按钮,点击按钮可以左右切换查询图片。

在这里插入图片描述

  1. grid.html页面展示:
    此页面通index.html页面相似,不同于index.html页面有九部影片信息,而grid.html页面有40部影片信息,此页面影片信息较为全面。

在这里插入图片描述

  1. about.html页面展示
    点击页面右上角按钮,找到“关于我们”按钮,点击进入。主页标题为相关咨询,下方分为六个小标题,可让用户查看相关资讯。

在这里插入图片描述

用户向下滑动,可以看到大标题“电影的魅力”。

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐