作者主页:编程千纸鹤
作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师
主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享
收藏点赞不迷路 关注作者有好处
文末获得源码
项目编号:无
前言:
随着近几十年互联网技术的快速发展,新闻数量呈指数式增长,新闻阅读俨然已经成为了当代人们休闲娱乐不可或缺的重要方式之一。但是互联网上的新闻资源种类繁多、信息庞杂,资源分布过于分散,且不同的读者会对新闻有着不同的阅读需求,这些原因导致读者想要快速、便捷、准确的找到自己心仪的新闻变成一个棘手的问题。而为了解决以上问题,让读者可以快捷的搜索阅读新闻信息,并能够得到良好的用户阅读体验,本文将会通过采用Python语言进行编写新闻联播爬虫系统设计与实现的全过程。
此系统将基于Python语言,通过爬虫技术来实现对新闻联播和央视网数据的爬取,并对获取的数据进行处理后将其存入数据库中,然后通过使用Django框架完成对新闻网站的搭建,以达到对新闻网站数据信息直观展示的要求。在此系统中,用户还可以实现对网站中新闻信息资源的阅读、搜索、推荐等基本功能,最后系统还支持超级用户以管理员视角对本网站进行后台数据的信息管理。经过对本网页新闻爬虫系统的多次测试表明,本系统功能合理完善,界面简单大方且具有人性化,易于操作,能实现用户对于新闻信息搜索、阅读等基本功能的操作,也可以大大提高读者的搜索阅读效率,满足用户的基本需求。
一,项目简介
经分析,对于网站的主要使用者——读者来讲,读者需要的是在众多新闻联播资源中获得自己最想要的,所以读者最主要的需求在于两个方面:第一个方面是轻松获得新闻联播数据资源,第二个方面是在新闻联播大数据中准确找到自己最需要的资源。所以在功能设计上来讲,读者对于系统功能的需求就是可以实现用户注册登录功能,进入系统后可以进行新闻联播信息的查看、搜索、阅读、评价等操作,同时可以按照新闻联播类别寻找搜索自己想要看的新闻。而本网站除了服务读者之外,还需对网站的管理者进行服务,对于管理员来说,他们需要对整个网页系统中的大量数据信息进行管理,包括读者的数据信息、管理员本身的数据信息以及新闻联播的数据信息。
综上所述,我们将根据用户的需求及所要实现的功能将本网页爬虫系统分为三大部分,即数据爬虫部分,用户视角的前台功能实现部分和管理员视角的后台数据管理部分:(1)数据爬虫部分主要是进行对新闻联播信息进行下载保存到本地,并将新闻联播的数据信息更新到数据库中;
(2)前台部分需要实现用户信息的注册和用户系统登录功能,以及用户对于新闻信息的搜索、阅读、收藏、推荐等功能;(3)后台部分则需要完成管理员对用户及新闻联播数据信息进行管理。
本系统的实现除了能够完成以上所有功能要求之外,同时还需要注意:界面设计简洁大方并且易于实际操作;数据的存储安全可靠,实时更新;系统具有良好的维护性和易于操作性。
经需求分析阶段的结果表明,需要将本网页新闻联播系统的功能整体划分为三大部分,即网络爬虫数据抓取部分,用户视角的前台功能实现部分和管理员视角的后台数据管理部分,然后对其进行更深一步的划分后主要的功能模块包括了用户的注册和登录部分,用户登录系统账号进入网站后进行对新闻联播的阅读、搜索、评价、收藏、推荐功能的部分以及管理员进入后台界面中对用户的数据信息和的数据信息进行统一管理的部分。系统的功能模块结构图如下图4-1所示。
图4-1 系统功能模块结构图
本系统是采用Python语言中的Django框架来实现的,通过该框架,前端界面与后端数据库及其他文件系统之间就可以进行交互,以完成系统中三个部分功能之间的连接,如此,通过Django框架设计新闻网站,在前端将具体页面设计展示给读者,在该页面中读者可以被满足与不同的新闻阅读需求,而在后端,管理员也可以进行数据信息的管理。
Django框架本身具有ORM系统和模板引擎,也提供MTV设计模式,这些都大大提高开发的效率。在本系统中与Django相连的数据库选择使用了SQLite,由于该数据库的开源性、便利性以及经济性受到越来越多的开发人员的青睐,更重要的是由于Python语言系统中自带SQLite模块,免去了安装的麻烦,如此,更适合本系统的开发。所以本系统的总体设计框架如下图4-2所示。
图4-2 系统总体框架图
系统功能用例图
读者所拥有的主要功能分为以下几部分,主要为用户注册登录系统,用户对新闻的搜索阅读,新闻评价,新闻收藏以及新闻推荐这几部分功能,具体如下图4-3用户用例图所示:
图4-3 用户用例图
后台部分,管理员可以通过登录超级用户即管理员账号进入系统后台进行后台数据的管理,具体的管理功能由两部分组成,分别是对系统已注册用户的信息数据进行管理以及对新闻联播的信息数据进行管理。管理员用例图如下图4-4所示。
图4-4 管理员用例图
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
三,系统展示
详细设计阶段的根本目标是确定系统具体应该如何实现,辅以编写代码,本章将详述基于Python的新闻联播爬虫系统功能的详细设计与实现,并对本系统中的主要功能及界面作以介绍。
新闻数据爬虫模块的主要分为两大部分,一部分是新闻数据的爬取过程,另一部分是将爬取的数据信息整理存入数据库中,其中新闻数据爬取部分的实现首先是在目录下建立一个spider.py文件,在该文件中输入要爬取的网站链接,调用request是库中的get方法,然后进行数据的解析,直至结束,如此便实现了新闻数据的爬取,详细的新闻爬虫流程如下图5-1所示。
图5-1 新闻数据爬取流程图
在获取新闻数据后,系统会将爬取的txt文件整理起来,返回所包含的指定名字的文件或文件夹的列表,通知Django当前使用的配置文件,再实例化每一个子类,将已经利用Python的shutil模块整理后的新闻源数据复制到目标文件夹的文件中,然后创建数据并将新闻名、作者、新闻描述、新闻封面信息以及txt文件信息等一同导入数据库,如此便完成了将已经爬取成功的数据存入数据库中的功能实现。具体的设计流程如下图4-2所示:
图5-2 数据存入数据库流程图
系统设计过程中,新用户因尚未创建个人账号,无法进行基本功能的操作,所以应先进行用户账号的注册,账号注册功能应对主界面中“注册”按键进行点击并跳转进入注册界面,然后按照提示在注册界面中填写个人信息,包括用户名、密码、联系方式等信息,然后点击确定,则创建完成一个新用户,注册的表单验证成功后则会跳转登录界面,用户需下一步“登录”操作。新用户注册个人账号的具体流程如下图5-3所示。
图5-3用户注册流程图
已经有账号的用户可以进行系统登录,用户在主界面右上角选择点击“登录”按钮后界面会自动跳转到用户登录界面,在此界面填写用户名和密码后点击确定,表单在收到登录的数据信息后会与数据库中信息进行比对,如果数据库中不存在该用户,则提示“账号不存在”,如果用户名存在,则可以继续验证密码信息,如果密码正确则会跳转到主界面,反之,则会提示密码错误。用户登录账号时的具体流程如下图5-4所示。
图5-4用户登录流程图
进入系统后首先看到的是本系统的主界面,主界面整体干净大方,界面主体用来展示新闻信息,界面左侧设置了全部新闻、最热新闻、最新新闻、新闻分类、我猜你喜欢以及我的信息六个功能按钮,点击每一个按钮都可以跳转至对应的界面,然后可以进行不同的操作。主界面右上方有搜索框可以为用户提供搜索新闻的功能,还有注册和登录按钮可以为读者提供用户登录功能和新用户注册功能。系统窗口的整体布局如下图5-5所示。
图5-5 系统主界面
新用户注册界面如下图5-6所示,用户注册时需要填写用户名、密码、邮箱地址、真实姓名等信息,确定信息无误后可以点击对号,然后界面会自动跳转至“登录”界面。
图5-6 新用户注册界面
用户注册后进入登录界面,在文本框里填写用户信息,即可登入系统,用户登录界面如下图5-7所示。
图5-7 用户登录界面
用户登录系统后,可以进行对新闻的搜索、阅读、评价、收藏以及推荐操作,下文将详述各部分功能的具体设计与实现。
(1)新闻阅读功能的设计
用户点击阅读一本新闻后即可跳转至新闻阅读界面,此过程中是系统根据新闻名在数据库中找到相应的txt文件,并将文件数据信息返回展示在界面中,整个系统中都可以完成分页展示的功能,也可以实现通过点击上一页或下一页按钮进行新闻的翻页,阅读结束后即可退出此界面。具体的新闻阅读功能流程如下图5-8所示。
图5-8 新闻阅读流程图
用户可以在主界面中随机点开一本新闻,用户可以在新闻信息界面中选择“点击阅读”按钮进行点击操作,点击后即可跳转界面至新闻内容界面,在此界面中会显示出爬取成功的新闻内容,本系统中设置了分页功能,用户可以点击下方的按钮进行翻页跳转,新闻阅读功能的界面如下图5-9所示。
图5-9 新闻阅读界面
若用户想自行搜索新闻来阅读,可以输入关键字到搜索文本框中进行搜索,在此过程中,系统接收到文本框中输入的关键字,将其进数据对比搜索,如果资源中有当前所搜新闻,则返回目标新闻的界面,但若没有相关新闻,则会提示“没有新闻”。此功能的设计流程图如下图5-10所示。
图5-10 新闻搜索功能流程图
(2)新闻搜索功能的实现
用户在主界面右上角的搜索框可进行新闻的搜索功能操作,输入关键字后,系统会自动提示与之相关的词,当点击进入后就会跳转界面至目标新闻的界面。
图5-11 搜索新闻之后
在此部分,功能可细致分为新闻的收藏、评论和评分三部分,三部分供能实现过程相似,下文将详述各部分的具体的功能设计以及实现。
(1)收藏功能设计
点击收藏按钮后生成数据,返回用户和新闻的ID与收藏信息一起存入数据库中,页面上收藏人数也在原来的基础上加一,具体流程如下图5-12所示。
图5-12 新闻收藏功能流程图
(2)评论功能设计
用户在新闻信息的界面中找到评论文本框,在其中评论后点击提交后生成数据,同时获取评论人的ID,将用户ID和用户评论的内容一起存入数据库中,处理结束后即可退出。具体的功能流程设计如下图5-13所示。
图5-13 新闻评论功能流程图
用户在对新闻进行打分操作时,先在对应的下拉框中选择想给出的分数,然后点击确定按钮进行提交,在提交过程中会先形成评分数据,同时会获得评分人的ID,将评分的信息和用户ID一起存入数据库中,并在系统页面中显示出评分,即可完成评分操作。具体的评分功能流程如下图5-14所示。
图5-14 新闻评分功能流程图
以上三种功能的实现:首先选择一本新闻进入其信息界面,界面中有打分、收藏、评论功能键,点击相应的按钮完成不同的操作。
点击分数下拉框选择自己想要打出的分数后点击“打分”按钮已完成评分操作,若完成后,界面上会出现“您已经进行打分”,同时“评分人数”在之前的基础上加一。评论收藏操作流程与评分功能相似,其中,评论的内容也会展示在新闻信息界面中,其他登录用户均可见。
图5-15 收藏打分评论新闻
(1)新闻推荐功能的设计
新闻推荐功能体现在“猜你喜欢”功能模块中,这部分功能设计主要通过协同过滤算法计算出用户偏好的相似度,然后根据用户的兴趣相似度进行推荐,本系统中设置提取相似度最高的前三名推荐,若所推荐的新闻不足三本,则在未看过的新闻中选择进行补充。具体流程图如下图5-16所示。
图5-16 新闻推荐功能流程图
(2)新闻推荐功能的实现
如下图5-17所示,点击“我猜你喜欢”按钮,将会在页面中显示出系统为用户推荐的综合指数最高的新闻,并按顺序向用户推荐。
图5-17 新闻推荐界面
系统将通过Django框架搭建实现后台管理部分,在后台数据管理的设计与实现过程中,系统将分为两大部分,一部分是用户数据信息的管理,另一部分是新闻数据信息的管理,下图是后台数据信息管理的主界面。
图5-18 后台管理主界面
管理员通过admin模式进入管理员系统,管理员输入账号密码,即可进入后台管理界面,系统中用户管理部分主要包括用户数据信息的更新,用户对新闻的评分信息管理以及用户对新闻的评论记录的管理,点击“用户”、“评论”、“评分”即可查看相对应的数据信息,管理员具有对以上信息更新的权限。详细的功能实现界面如下图所示。
图5-19 用户数据管理界面
对于新闻数据管理部分,管理员可以查看新闻信息以及新闻分类的标签信息,管理员点击“新闻”和“标签”即可进入数据信息管理部分,管理员也可以对以上信息进行添加、删除等操作。
图5-20 新闻分类标签管理界面
四,项目总结
垂直搜索引擎是相对通用搜索引擎的信息量大和查询不准确提出来的新的搜索引擎服务模式,通过针对某一特定领域、某一特定人群或某一特定需求提供的有一定价值的信息和相关服务。其特点就是 “专、精”,且具有行业色彩,相比通用搜索引擎的海量信息无序化,垂直搜索引擎则显得更加专注和具体。由于 用户查询信息一般都是基于某个特定知识领域进行信息检索,因此,垂直搜索引擎可以大大提高信息检索的精确度。本章对论文所做的主要工作进行了总结,并对未来的工作进行了展望。
(1)前期准备阶段:前面做了大量的资料收集准备,在学术网站上面搜集关于实现此系统方面的相关文献,经认真研读,确定了本系统的课题背景、发展现状以及研究的目的与意义,同时也开始学习Python语言的基础和实现爬虫系统的框架,对本课题有了初步的认知,对实现该系统有了清晰的定位和规划部署。
(2)需求分析阶段:系统的设计与实现要以系统需求作为开发标准,在此阶段通过对系统需求进行全面合理的分析后确定读者对新闻网站的最大需求就是能够轻松获取海量的新闻数据资源并在其中精准的找到自己所需的那本,因此,本阶段的主要工作是在系统需求分析和系统可行性分析的基础上,确定系统开发工具和开发环境,即利用Python语言+爬虫技术+Django框架,辅以SQLite3数据库和协同过滤算法共同开发本系统以满足用户需求。
(3)系统总体设计阶段:本阶段工作内容是基于前两阶段对系统的共同分析的进一步研究,根据需求分析形成的结果可以实现此爬虫系统的总体设计,将系统整体分为数据爬取、用户前端以及管理员后台管理三部分。在本阶段系统总体设计完成后,本人还对系统数据存储使用做了详细的设计,以此作为系统功能详细的设计与开发基础,以期完成系统的下一步实现。
(4)系统详细设计与实现阶段:这一阶段主要通过代码来实现功能。由于使用Python中数据库的映射框架进行实体类代码的编写可以自动生成数据库表结构,所以数据库实现效率、工作进程进一步提升。系统前端界面体验舒适度增强。
(5)系统测试阶段:本阶段已经基本实现功能开发。为了保证系统的正常使用,我对该系统做了进一步的测试,经验证,该系统可以正常使用,体验良好。