目录
前面内容请移步
资源下载+毕业论文+答辩
4 系统详细设计
详细设计是在软件工程正式开始编码工作前的最后一个阶段。在系统详细设计阶段,也就是本系统正式开始编码工作前,在此简单介绍下在编码过程中所用到的一些工具包,还有一些算法原理等等,同时还有本系统模块比较细粒度的介绍与设计分析以及其他在软件详细设计阶段需要做的一些工作。
4.1 系统模块设计
系统结构逻辑上由四个部分组成:第一个部分是数据采集模块,负责原生网页文档数据采集与正文抽取;第二个部分是采集数据固化模块,将数据采集模块采集回来的原始网页文档进行入库固化;第三个部分负责网页文档数据的处理与分析,从数据库读取原始网页文档数据之后进行中文分词,然后根据分词结果再进行相似度分析,并将分析结果为同一相似新闻的结果进行存储;第四层是数据展示模块,负责将分析整理后的数据以图表的形式绘制出来。
4.1.1 数据采集模块
数据采集模块(爬虫系统)采集工具使用了HttpClient框架,配合正则表达式解析,抽取网页内容。HttpClient是Apache Jakarate Common下的一个子项目,开源而且免费,HttpClient起初的目的是为了做web测试用的,后来其功能不断完善,不断加强,在功能上基本上可以以假乱真真的浏览器,但它并不是一个浏览器,仅仅是实现了浏览器的部分功能。HttpClient目前已经应用在很多的项目中,比如Apache Jakarta上很有名的另外两个开源的项目Cactus和HTMLUnit都使用了HttpClient。HttpClient基于标准而且纯净的Java语言,实现了Http1.0和Http2.0,以可扩展的面向对象的机制实现了Http协议的全部方法(GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE),并且支持Https协议,通过Http代理建立起透明的连接,利用CONNECT方法通过Http代理隧道的Https连接,支持NTLM2 Session,SNENPGO/Kerberos,Basic,Digest,NTLMv1,NTLMv2等认证方案,而且自带插件式的自定义认证方案。HttpClient设计时候注重了可扩展性以及自定义性,所以HttpClient能支持各种各样的不同的配置方案。同时在多线程的环境下HttpClient使用起来更加方便自如,HttpClient中定义了网页连接管理器,可以自动管理各种网页连接,能发现处于非正常的连接并关闭,起到了很好的防止内存泄漏的作用。HttpClient能自动处理Set-Cookie中的Cookie,可以插件式的自定义Cookie策略,Request的输出流可以有效地从Socket服务器中直接读取相关的内容。在Http1.0和Http1.1中利用Keep-Alive保持长久(持久)连接,可以直接获取服务器发送的response code和headers。另外,HttpClient可以设置连接超时,实验性的支持Http1.1 response cahing。
使用HttpClient GetMethod来爬取一个URL对应的网页,需要如下步骤:
生成一个HttpClient对象并设置相应的参数。
生成一个GetMethod对象并设置相应的参数。
利用HttpClient生成的对象来执行GetMethod生成的Get方法。
处理返回的响应状态码。
如果响应正常,则处理Http响应内容。
释放连接。
获取了响应内容后需要解析Html DOM对象,这里选用了jsoup。Jsoup是一款Java的Html文档解析器,可以直接解析某个URL地址,但是这里选用了HttpClient代替了他去获取Html DOM对象,因为jsoup自带的打开并解析URL的功能是一个比较基础的功能,远不如HttpClient提供的丰富,在这里,本文采用别的工具来替代Jsoup来获取Html DOM对象,比如上文介绍的HttpClient,获取了网页文档数据之后,可以把网页文档数据以字符串的形式传递给Jsoup来进行Html解析。在Html文档的解析方面,Jsoup自带了很多非常非常方便的方法与API,例如:可以像jQuery那样来直接操作HTML网页元素,此外还有其他提取HTML文档中需要的内容的方法,读者可以自行阅读Jsoup的官方使用文档。最后一点,也是很重要的一点,使用Jsoup是完全免费的,包括对其进行代码上的复制与克隆,可以根据项目的不同需求来修改Jsoup的源码,作为一个相当受欢迎的Html文档解析器,Jsoup具有以下的优点:
Jsoup能直接解析网页URL从中取出需要的内容,也可以直接抽取Html文档字符串来进行解析工作;
Jsoup是实现了CSS的选择器,可以像jQuery那样直接操作元素;
Jsoup 不仅能方便的处理Html文档正文内容,还能处理Html文档元素的相关元素,如获取Html标签的属性等功能;
除此之后,有一个很重要的特性,目前很多网站采用了不同的后台环境,有Java、PHP、Python、Node.js等作为开发工具,Web开发框架更是五花八门,所以很可能会出现一些纰漏,如网页标签缺乏闭合的部分,熟悉Html的人都知道,Html语言是一种容错性极高的语言,即使标签未能适时的闭合,浏览器也是能正常显示网页的,但是对于这些通过网站Html文档来获取网页信息的人来说,这个特点是非常致命的,会对最终的解析结果产生很大的负面影响。然而使用Jsoup完全可以避免这个问题,Jsoup设计的时候已经想到了这些问题,其对Html标签的闭合等特性也是具有容错性的,例如下面几种状态:
1.Html文档出现了没有关闭的html标签(比如:<p>陈晋豪的论文<p>论文写起来挺难<p>内容有了就好了</p> <p>AB123</p>)
2.Html文档数据中的隐式标签(比如:它可以自动将 <td>表格</td>包装成<table><tr><td>)
3.能创建非常可靠的Html文档结构(比如:html标签包含head 和 body,在head只出现恰当的元素)
爬虫系统的爬取对象分别选择了凤凰网新闻、网易新闻、搜狐新闻,因为这些新闻都开放了点击数量查询,且这三大媒体无论是影响上,还是覆盖面上,都是非常巨大非常广泛的,非常适合作为爬取对象,爬取过程中也没有复杂的Ajax需要处理,而且这些新闻的访问数据都是每天更新的。
爬虫程序需要以循环定时运行在响应的服务器上,每天定时爬取以上网站的新闻内容,并存入数据库,数据库采用了Mysql,因为Mysql比较轻量级,有免费的学术研究的版本,而且比较适合当前场景。Mysql数据库引擎采用了MyIASM,按理来说,MyIASM是比较古老的引擎,但是MyIASM存储引擎在曲度方面的性能要好于INNODB,虽然不支持事务,但是爬虫存储暂时不涉及事务的使用,再加上MyIASM优秀的插入查询速度,使得爬虫数据的存取非常快捷、迅速&#