Bootstrap

基于Python的BeautifulSoup库爬取电影、图书、音乐数据的数据分析系统设计与实现

第一章 需求分析

    现如今阅读、观影、听歌已成为人们日常生活的一部分,每个人手机里或多或少的都有 与这些相关的软件。在每一次的欣赏、聆听的背后,都隐藏着数据的奥秘。比如一部电影每 个评分数量的多少, 反映了大众对于它的直接评价。每年音乐的发行量,反映了彼时音乐创 作人的创作量以及音乐市场的火爆程度。

    基于以上认识,本项目旨在分析与电影、图书、音乐有关的数据去了解一部电影、 一首音乐的市场反响,亦或是对多数电影、音乐等综合分析其背后整个市场的情况。因为需 要大量的数据集,由此我们便想到了豆瓣这个平台。

    这个平台主要是爬取豆瓣平台的信息,通过对数据的爬取、存储、读取、处理与分 析、可视化等一系列操作,对数据进行了多维度的分析和展示,同时选取了几个热门条目作 为例子,进行单个分析,从中得到了许多有效的信息, 这些信息一方面可以帮助大众更好的 去了解电影、图书、音乐, 另一方面也能够为投资者以及从业者带来便利,更好的为他们展 示哪些是符合当前市场的。很多人在学习中也会进行相关的案例分析,但本项目与其他竞品 有以下区别:

本作品

其他竞品

数据集的获取

本项目的数据集均由团队进 行爬取

其他竞品中的数据集多来自 于教学团队或他人给予

数据集的数量以及质量

本作品的数据集来自豆瓣相

对于学习案例的数据集更加

丰富且更有实际意义

其他竞品中的数据集相对单 一且数据量小

数据集的分析

本作品对数据的分析更加完

整,更加多元化,能够对数

据进行系统的分析

其他竞品中的数据分析角度 较单一

数据分析几个的过程

本作品集成了几个步骤为一

体话从数据获取直至数据可

视化自动完成

其他竞品中一般为分步骤完 

第二章 概要设计

相关调用关系请参考上图,下面为各个文件的介绍。

前端有如下页面:

三个图表页面: index.html(电影) 、chart-2.html(音乐)、chart-3.html(书籍) 三个热门页面: movie.html(电影) 、book.html(书籍) 、music.html(音乐)

一个具体条目信息介绍页面: content.html(具体信息)

后端有如下接口:

链接

对应文件

调用函数

用途

count/

get/count.py

main()

获取数据库内各个集合的数量

get/

collection/g et.py

main()

采集数据合集, 需给定 id、type

get_music/

collection/g et_music.py

main()

采集音乐数据, 需给定 id

get_movie/

collection/g et_movie.py

main()

采集电影数据, 需给定 id

get_book/

collection/g et_book.py

main()

采集书籍数据, 需给定 id

wordcloud/

get/wordclou d.py

get_wordcl oud()

生成评论词云, 需给定 id、type,非必需 nochache 默认为 0 使用 redis 缓存, 为 1 时不使用 redis 缓存

searchPoin t/

get/search2.

py

get_search ()

显示最多 20 条信息,即一次爬取,需给定 q,非必需 cat、start

searchId/

get/search3.

py

get_search ()

获取作品信息, 即详情页,需给定 id、 type

get_emotio

get/get_emot

ChartView.

生成情感分析饼图,需给定 id、type、

n/

ion.py

as_view()

nochache,非必需 n  review 个数,默认 1 

charts/mov ie/

charts/movie

.py

ChartView. as_view()

生成电影分析图表, 需给定 id、type、

typ,typ 为图表类型, 非必需 num 分析的 数据量,默认为 5000,nochache 默认为 0 使用 redis 缓存,为 1 时不使用 redis  存

charts/boo k/

charts/book.

py

ChartView. as_view()

生成书籍分析图表, 需给定 id、type、

typ,typ 为图表类型, 非必需 num 分析的 数据量,默认为 5000,nochache 默认为 0 使用 redis 缓存,为 1 时不使用 redis  存

charts/mus ic/

charts/music

.py

ChartView. as_view()

生成音乐分析图表, 需给定 id、type、

typ,typ 为图表类型, 非必需 num 分析的 数据量,默认为 5000,nochache 默认为 0 使用 redis 缓存,为 1 时不使用 redis  存

第三章 详细设计

3.1  界面设计

顶上是项目名以及搜索框,在下面就是各个页面切换的超链接, 中间显示的就是当前 MongoDB 数据库各个集合里所存储的数据量, 每次加载都是实时统计。除了数 据之外,还加了两个按钮, 分别用来调整图表分析的数据量以及重新生成图表,数据 量默认取的是 500 条且为随机取出。

以电影图表最上面的饼图为例,将鼠标放置图表上,也会有具体的信息,右边倒数第二个 Label 可以控制饼图是否显示该数据,最右侧的工具栏也很丰富,缩放工具可以在柱 状图、散点图、折线图中使用, 用查看具体的范围内的数据, 同时还有数据视图功能和图表 下载功能。左下角有页面加载状况,右下角有置顶功能,这两个功能在有图表的页面都会有。

这是电影的热门页面,这类页面由选出的 6 个作为代表展示(可调用豆瓣热门电影 接口获取替换 点击单个条目后可跳转到 content.html 具体内容介绍页面。顶上放是点 击搜索按钮后的效果。(每个结果都可跳转到详细内容页面,若跳转过去的是数据库不存在 的条目,那后台将进行自动进行爬取、数据预处理、数据存取等工作, 爬去完成后再读取、 处理和显示图表,爬取的时长由条目评论的数量决定。)

这是详细页面中的上部分内容, 主要为该条目的文字详情信息介绍,在其下面还有五张 针对于该条目所生成的图表。

3.2  数据库设计

3.3  关键技术

1) 数据爬取:(重点、难点)

在数据爬取时要不断地完善修改代码,因为代码在初始编写时是针对单个页面来写 的, 能适应单个页面不代表能适应所有类型的页面,因为有些页面即使类别相同,所展示的 内容不同有多有少,就会导致爬取的时候代码出现问题, 此即使对单个页面的爬取代码也 要反复修改多次,来不断能完善。在爬取的代码中,同时也为了防止被豆瓣的反爬机制 所屏蔽而加入了相关代码,但也相应的造成了爬取时间的延长。

2) 数据存储查询优化:(重点、难点)

为了证明数据存取优化的重要性,下面放了一张在服务器上爬取的几个时间节点的资源消耗图。最左边的一段峰值点时段就是使用未优化过的查询语句所造成的。在完成语 句的优化后,后几次爬取就未达到如此之高。

 

3) 数据处理:(重点、难点)

因为不知道数据库里所存储的是否符合所要数据的规范,任何类型的数据都会出现,以及是否有对异常值等,所以在提取出数据后, 还需要对其再做相关的处理, 对数据缺失、极端值、数据格式不统一等问题进行处理。(下图就是其中的一个数据处理的例子)

 

4) 图表展示和分析:(重点、难点)

选取完要分析的数据关系后, 就该选择合适的图表来进行输出表示,确定好图表后,还要考虑图表的展现形式, 包括图表中的工具配置等,同时还要对图表进行分析。(下图就是其中的一个数据可视化的例子)

5) Redis 缓存技术:(重点)

一开始在访问网站时,每次生成图表都要再次进行读数据、分析处理数据,这不仅大大 增加了对服务器的性能压力, 同时也加慢了网页的加载速度,由此,选择了 Redis,当图表第一次生成就让 Redis 存储其结果 24 小时,第二次在访问时就可以直接从 Redis 中获取结 果,省去了再次进行读数据、分析处理数据的过程,很好的解决的上述的两个问题。

 

6) 前端图表的链式调用:(重点)

考虑到如果一加载页面,就一下子请求所有图表,那会对服务器一下子产生很大的压力, 容易出错。所以我们想到了使用链式请求的方法, 一个一个请求图表, 且同时加上 loading 的动态效果,表名当前页面的图表加载状况。

第四章 测试报告

4.1  系统测试的主要内容

为了确保测试的质量,系统多次进行了软件测试, 主要包括代码审阅、模块测试、功能 测试、安全性测试等内容。

代码审阅:在系统实现完成以后,应先对代码的规范性进行检测,并且测试代码的语法 逻辑问题, 保证系统能正常运行。

模块测试: 对系统的主页模块, 页面跳转,搜索框,图表等模块进行测试, 确保其工作 正常。

主要测试过程: 模拟用户访问页面, 不断点击跳转页面; 模拟用户查找特定案例, 进行 搜索框搜索;模拟用户查看数据图表。

测试结果: 页面能正常跳转、搜索功能可以正常使用。词云模块图表展示不正常, 请求 本地时正常。

修正过程: 因为服务器处理数据能力有限,当前条件下在打开相关页面后修改代码可以 达到展示效果。在条件成熟后会选择升级服务器。

4.2  系统模块测试

系统模块测试主要是对系统中各个功能模块进行详细的测试工作,发现问题并处理问题。 测试工作是通过手动反复对系统进行操作,观察系统运行的结果,判断该功能模块是否达到  应用要求。具体测试如下表所示:

 5-1 系统模块测试表

测试内容

测试方法

预期结果

测试情况

主页测试

打开 index 主页面

打开成功

通过

页面跳转

在页面上点击所有具有链接功 能的模块

所有页面都能成功跳转

通过

搜索框

在搜索框内输入想要查询的电 影、音乐或图书

若查询内容存在数据集内或有与查 找内容相近内容则显示相应选项,

若没有匹配数据则不显示

通过

图表

将鼠标放在图标表上,并在具 有缩放功能的图标上使用用鼠 标滚轮或点击图表内缩放功能

显示鼠标停放位置所对应的相应信

息,三维立体图以及具有缩放功能

的图表能正常缩放

通过

4.3 系统测试

模块测试的完成只是保证了模块的正常工作,无法保证整个整体工作是否能够正常的运 行。所以在模块测试完成以后, 要进行系统完整的用例测试, 来验证系统是否运行正常。

本系统为基于 Window 10 平台, 系统设计分为四部分。测试过程中首先测试主页面展 示, 确保主页面模块可以正确打开并展示相关内容。然后测试页面跳转模块,能保证页面之 间能够互相跳转。然后测试搜索框模块,确保能够进行精确定位查询, 展示用户所需要查找 的内容。最后测试图表模块, 确保图表能正常显示,以及图表内某一块内容能够展示其独有 的信息。若图表具有缩放功能,测试其能够利用缩放功能对图表的整体或局部内容进行查看。 如果四个模块均正常运行,说明该系统均已正常工作。

4.4 技术指标

通过测试发现,本系统因图表展示较多,运行速度相对较慢达到 6.5s。因为本系统数 据来源为豆瓣,因此数据安全性较高。在系统初期阶段没有上线用户登录注册功能,因此没 有账号安全性的威胁。系统扩展性较强,耦合性较低内聚性较强。本系统的部署非常简单, 方便性极强。可用性很强。

第五章 安装及使用

5.1  安装环境要求

操作系统: Windows 10 或 Centos 7

应用软件环境: Python 3.6 及以上、 Redis、MongoDB(后两个可根据需要搭建)

浏览器:Chrome 或 Firefox

5.2 Python3.7 安装

(注: 以下安装过程皆为 Windows 下的, 如需 Linux 安装教程,请咨询相关服务人员) 去官网下载安装包, 下载链接: Python Releases for Windows | Python.org

进入下载链接后选择对应的版本下载

①点击 customize installation。(自定义安装路径),也可以选择 Install Now 选择默认 路径安装

②勾选 add python 3.7 to PATH(这样可以避免安装后,还要手动去配置 python 的环境变 量)

后续操作默认即可, 安装完成, 点击 close 按钮

 

win+r,录入 cmd,进入如下窗口,录入: python,点击 enter,出现如下内容,则为安 装成功。

5.3  启动服务

...

...

...

完整方案及学习源码地址:基于Python的BeautifulSoup库爬取电影、图书、音乐数据的数据分析系统源码+文档.zip资源-CSDN文库

;