软件工程毕业论文
JIANGXINORMALUNIVERSITY
学士学位论文
THESISOFBACHELOR
(2010—2014年)
比赛信息集成系统
——后台网络爬虫与信息处理
Platform game information integration system
——The network and information processing
指 导 老 师 :__彭雅丽(讲师)
姓 名 :_____何亚婷___
学 号 :
学 院 :____软件学院___
专 业 :____软件工程___
完 成 时 间 :___2014年3月
___
声 明
本人郑重声明:
所呈交的毕业设计(论文)是本人在指导教师指导下进行的研究工作及取得的研究成果。其中除加以标注和致谢的地方,以及法律规定允许的之外,不包含其他人已经发表或撰写完成并以某种方式公开过的研究成果,也不包含为获得其他教育机构的学位或证书而作的材料。其他同志对本研究所做的任何贡献均已在文中作了明确的说明并表示谢意。
本毕业设计(论文)成果是本人在江西师范大学读书期间在指导教师指导下取得的,成果归江西师范大学所有。
特此声明。
声明人(毕业设计(论文)作者)学号:
声明人(毕业设计(论文)作者)签名:
签名日期: 年 月 日
摘要
摘要
针对当前网络中对于比赛信息整合的缺乏,人们难以方便地寻找到当前某一阶段所举办的全部比赛信息的现状。为此,全力打造一个服务于在校学生和在职人员等轻松、便捷、互动地参与各类竞赛活动的竞赛门户网站迫在眉睫。因此,该系统致力于系统地收集和整理各个领域的各类赛事,为参赛者提供最优质的信息服务,使得来自全国各地的参赛选手可以相互学习可以分享心得,并且通过各种有意义的比赛不断提升自己。
为了提供最全面的大学生赛事信息,比赛信息平台通过设计赛事的爬虫系统,整合所有的赛事信息,并经过筛选后呈现在用户面前。系统主要功能模块包括前台网站的实现,网络爬虫的制作,论坛的开发,后台开发与管理以及会员空间的开发与实现。系统使用了heritrix、htmlparser和java相结合的技术开发。后台使用heritrix和htmlparser技术实现比赛信息的抓取和筛选等工作,同时使用java技术录入信息,并管理前台的会员信息、论坛信息及赛事信息等,前台运用java技术js特效等实现赛事呈现、论坛运行、会员赛事发布等功能。
论文首先叙述了系统的开发背景和研究内容,接着简单介绍了系统的开发平台及相关技术,然后对系统做了一个整体的系统规划和交互数据的设计,最后对网络爬虫模块和后台信息筛选调度模块的设计与具体实现做了重点阐述。
关键词:网络爬虫技术;页面解析技术;数据流技术;js特效。
Abstract
Abstract In view of the current network for lack of competition information integration, it is difficult to conveniently find current situation of one stage held by all the game information. Therefore, to build a service to students and staff, easy, convenient, interactive participation in various competitions contest portal imminent, therefore, this system aims to systematically collect and collate all areas of various events, to provide the best quality information service for the participants from all over the country, the contestants you can learn from each other to share experiences, and through various meaningful games continue to improve their own.
In order to provide students the most comprehensive event information, competition information platform through the design event crawler system, integrating all the event information, and after screening appear in front of users. The main function modules of the system including the realization of the website, making web crawler, the forum's development, the development and implementation of the development and management as well as members of space. System development using heritrix, Htmlparser and Java combination. Grab and screening, the background using heritrix and Htmlparser technology to realize the game information, Java technology is used to input information, and manage the membership information, forum information and event information, front using Java technology JS effects such as realization of the event show, running, Members Forum event dissemination functions.
This paper first describes the development background of the system and the content of the research, and then introduces the system development platform and related technologies, and then designed a whole system planning and interactive data on the system, the design of network crawler module and background information screening himself responsible for the scheduling module and implementation to make the key exposition.
Keywords: Web crawler technology; page analysis technology; data stream; JS effects.
目录
第1章 引言 .............................................. 1
1.1 系统开发的背景 .............................................. 1
1.2 系统开发的目标、意义 ........................................ 1
1.3 本文的组织 .................................................. 2
第2章 相关技术简介 ...................................... 4
2.1 系统开发平台及开发工具 ...................................... 4
2.2 工具和编程语言 .............................................. 4
2.2.1 HERITRIX技术 .................................................... 5
2.2.2 HTMLPARSER技术 .................................................. 6
2.2.3 JAVA语言 ....................................................... 6
2.2.4 JAVA IO流技术 ................................................... 7
2.2.5 JDBC技术 ...................................................... 8
第3章 系统分析与设计 .................................... 9
3.1 功能需求 .................................................... 9
3.1.1 系统数据流图 ................................................... 9
3.1.2 系统状态图 .................................................... 11
3.2 功能介绍 ................................................... 12
3.3 概念结构 ................................................... 13
3.3.1 概念结构设计 .................................................. 13
3.3.2 逻辑结构设计 .................................................. 14
第4章 模块实现 ......................................... 17
4.1 爬虫模块 ................................................... 17
4.1.1 设计事项 ...................................................... 17
4.1.2 操作界面 ...................................................... 17
4.1.3 核心代码 ...................................................... 23
4.2 页面解析文本信息入库模块(HTMLPARSER) ....................... 29
4.2.1设计思想 ...................................................... 29
4.2.2操作界面 ...................................................... 29
4.2.3 核心代码 ...................................................... 31
4.3 信息筛选上传、信息查看删除的模块 ........................... 34
4.3.1 设计思想 ...................................................... 34
4.3.2操作界面 ...................................................... 35
4.3.3 核心代码 ...................................................... 37
总结 .................................................... 40
参考文献 ................................................ 42
第1章 引言
1.1 系统开发的背景
信息在现代经济生活中的作用越来越大,对于个人而言,缺乏信息将导致很多机会的丧失。与此同时,现在的大学生缺乏社会实践锻炼,自我竞争的意识在逐渐降低,而且社会上多数在校大学生沉迷于网络游戏,缺乏主动学习、参与竞争的意识。
当下社会,竞争与挑战是每一个人都将面对且必须面对的,比赛,是可以更好地证明自己的一个重要手段。然而现今缺乏一个整合了所有比赛信息方便人们寻找的平台,学生获得信息的途径也总是少得可怜。
有一个属于自己的比赛信息集成系统成为亟待解决的问题。缺少一个可以每天登陆系统,了解到当下最新的比赛资讯,能够分门别类的,整整有序的,及时全面的网站平台。鉴于此想法,本次项目选择开发比赛信息集成系统。希望通过比赛信息集成系统这个平台让大学生真正得到锻炼的机会,让他们认识到自己的真正价值,发现自己除了游戏之余还有更大的发展空间。
目前,国内同类的赛事信息类系统有“赛才网”。赛才网偏社区、家园、群组,提供的范围较大且包含很多新闻信息;与赛事信息集成系统地不同在于,比赛信息集成系统要做的是以赛事信息提供为主,主打“方便、即时、全面”的概念,对赛事信息要求较高,讨论交流区为辅。两者侧重点不一。
针对于此,此次项目致力打造一个服务于在校大学生的轻松、便捷、互动地参与各类竞赛活动的竞赛门户网站,致力于系统地收集和整理各个领域的各类赛事,为参赛者提供最优质的信息服务,使得来自全国各地的参赛选手可以相互学习分享心得,通过各种有意义的比赛不断提升自己。希望通过此次开发的平台项目,能为广大学生及赛事爱好者提供全面、即时的赛事信息,在分享赛事资讯的同时提供一个交流、讨论的平台。
1.2 系统开发的目标、意义
开发目标:本系统主要为全力打造一个服务于在校学生和在职人员等轻松、便捷、互动地参与各类竞赛活动的竞赛门户网站,为参赛者提供最优质的信息服务,来自全国各地的参赛选手可以相互学习分享心得,通过各种有意义的比赛不断提升自己。系统中主要的开发包括赛事信息网站前台以及赛事网站后
台两大部分。其中前台中,本组开发主要集中于网站的开发,方便用户浏览下载信息;赛事论坛开发,用户可以分享赛事经验,共享赛事资源;用户中心开发,方便用户获得更多的赛事资源的权利;而后台,主要着重爬虫系统开发,半自动傻瓜式的获取全网更多赛事资源,整合成为本系统的资讯,赛事资源丰富,更受用户青睐;用户管理、论坛管理等等,系统地、有条理地管理前台信息,让系统健全运行。通过前后台的整合,统一,协调地完成此次系统开发出分门别类的、整整有序的、及时全面的赛事网站平台 系统开发能为在校的大学生提供最为全面、优质的赛事信息,为提高中国大学生的身心素质做出贡献。主要表现在(1)有利于大学生正确认识自己,对自身成长产生紧迫感。通过广泛的社会比赛,能让学生看到自己和市场需求之间的差距,看到自身知识和能力上存在的不足,比较客观地去重新认识、评价自我,逐渐摆正个人与社会、个人与人民群众的位置。(2)有利于大学生对理论知识的转化和拓展,增强运用知识解决实际问题的能力。大学生以课堂学习为主要接受方式,这对大学生来说非常重要,但这些理论知识并不代表大学生的实际技能,往往难以直接运用于现实生活之中。比赛的方式使大学生接近社会,获得大量的感性认识和许多有价值的新知识,同时使他们能够把自己所学的理论知识与接触的实际现象进行对照、比较,把抽象的理论知识逐渐转化为认识和解决实际问题的能力。(3)有利于发展大学生的组织协调能力和创新意识。各种种类繁多的比赛没有课堂教学太多的束缚和校园生活的限制,学生们的积极性被充分调动起来,兴趣高涨,思维也空前的活跃起来,往往会产生一些创造性火花,在实践中勇于开拓、敢于创新。(4)有利于提高大学生个人素养,完善个性品质。在比赛中的困难和危险面前,要求大学生们具有一定的牺牲精神和坚强的品质。赛事活动多了,并且能深入下去,大学生在积极参与的过程中,就会逐渐养成坚韧、顽强的优良品性,养成务实的学习态度和生活作风,不断提高自己、完善自己。
1.3 本文的组织
论文正文包括四章:引言、系统相关技术、比赛信息集成系统的分析与设计、系统模块的设计与实现。
第1章为绪论,分为3节,主要介绍系统的开发背景、系统的开发目标及研究内容及本文的组织。
第2章为系统相关技术,分为2节,主要介绍系统相关技术:爬虫技术功能、页面解析的功能、以及信息筛选及录入的功能等的前提下进行介绍的,运
用了heritrix、htmlparser、java io、java技术等实现。
第3章为比赛信息集成系统的分析与设计,分4节,包括系统模块设计,功能需求,数据需求,数据库设计。
第4章为个人模块设计与实现,分4节,包括比赛信息系统的爬虫模块、页面解析文本信息入库模块,以及信息筛选上传、信息查看删除的模块的设计。
第2章 相关技术简介
2.1 系统开发平台及开发工具
硬件环境: 个人PC、电网、电信网络等。
软件环境: MyEclipse 8.0、Apache、Tomcat 5.5。
相关技术: Html+div+css+javascript;爬虫heritrix;页面解析技术:htmlparser;数据库sql;struts2模式。
相关工具:Microsoft SQL Server 2005、Macromedia dreamweaver 8、MyEclipse 8.0。
2.2 工具和编程语言
在比赛信息集成系统中,运用了java+sql+heritrix+htmlparser等技术。其中后台主要运用了heritrix爬虫技术。
首先,Heritrix[1]是一个纯由Java开发的、开源的Web网络爬虫,用户可以使用它从网络上抓取想要的资源。它来自于www.archive.org。Heritrix最出色之处在于它的可扩展性,开发者可以扩展它的各个组件,来实现个性的抓取逻辑,比赛信息系统利用它实现更多赛事信息的全网爬取,取得更多的大学生赛事资源。
其次,Java[2] [3]语言是一种功能强大的编程语言,负责heritrix应用的业务逻辑的实现和对应用程序进行控制。 再次,Htmlparser是一个纯的java写的html(标准通用标记语言下的一个应用)解析的库,它不依赖于其它的java库文件,主要用于改造或提取html。它能超高速解析html,而且不会出错。就其他解析工具来说,htmlparser就是目前最好的html解析和分析的工具。因此,从heritrix爬取下来的.Html页面通过htmlparser遍历解析成.Txt文件,为赛事信息的筛选以及录入做好充足的准备。因为htmlparser需要与数据库sql连接进行页面的解析存储,因此本系统在这里运用了JAVA中的资源文件(properties),通过加载app.properties文件实现遍历.Html文件解析并保存到指定的文件中。
再次,本系统还引入了java.io包完成最后解析成功的.Txt文件的读写工作。JAVA IO[4]流可分为四大抽象类:字符流:ReaderWriter,字节流:InputStream(读数据)OutputStream(写数据)本系统中主要运用的是字节
流与读写数据InputStream 和 OutputStream。
最后,而存入数据库则使用较为普遍的JDBC[5]技术,JDBC(Java Data
Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使
数据库开发人员能够编写数据库应用程序。
下面就heritrix、htmlparser、java及java io、JDBC进行介绍
2.2.1 heritrix技术
heritrix[6]技术Heritrix是一个专门为互联网上的网页进行存档而开发的网页检索器。它使用Java编写并且完全开源。它主要的用户界面可以通过一个web流量器来访问并通过它来控制检索器的行为,另外,它还有一个命令行工
具来供用户选择调用。
Heritrix是由互联网档案馆和北欧国家图书馆联合规范化编写于2003年
初。第一次正式发布是在2004年1月,并不断的被互联网档案馆和其他感兴趣的第三方改进。到现在已经成为一个成熟的开源爬虫,并被广泛使用。它的工作流程是一个循环,具体流程是:1 在预定的URI中选择一个。2 从选择的
URI的网址下载远程文件3 分析,归档下载到的内容4 从分析到的内容里面选择感兴趣的URI。加入预定队列。5 标记已经处理过的URI。
Heritrix的使用首先应该知道它的配置与使用,在这里,本系统用的是heritrix的1.14.4的版本,安装heritrix时值得注意的heritrix.properties文件。在 heritrix.properties中配置了大量与Heritrix运行息息相关的参数,这些参数主要是配置了Heritrix运行时的一些默认工具类、WebUI启动参数,以及Heritrix的日志格式等。当第一次运行Heritrix时,只需要修改该文件,为其加入WebUI的登录名和密码。
接着可以实行简单的任务抓取工作,当然,简单的安装于抓取工作不能满足本系统的需求,因此需要更多的扩展与组件的开发,首先需要扩
FrontierScheduler,将需要的所有链接的处理。将已经爬过的URI做标记,并将未处理的链接放入待处理队列。其次 扩展MirrorWriterProcessor,有的
时候我们需要在网页下载之前将网页进行分析并提取有效内容存储起来,这时我们可以扩展MirrorWriterProcessor这个模块。利用一个开源的包
htmlparser分析网页结构,并将结果存储起来。htmlparser可以在文件中获得。
再将下载的包添加到项目的引用列表中,从而实现下个步骤的开发。
2.2.2 Htmlparser技术
HTMLParser主要是常用来解析html页面并获取自己需要的数据,经常是和网络爬虫(如:Heritrix)一同使用,它的基本功能是:
1、信息提取
1)文本信息抽取,例如对HTML进行有效信息搜索; 2)链接提取,用于自动给页面的链接文本加上链接的标签; 3)资源提取,例如对一些图片、声音的资源的处理; 4)链接检查,用于检查HTML中的链接是否有效; 5)页面内容的监控。 2、信息转换
1)链接重写,用于修改页面中的所有超链接; 2)网页内容拷贝,用于将网页内容保存到本地;
3) 内容检验,可以用来过滤网页上一些令人不愉快的字词; 4) HTML信息清洗,把本来乱七八糟的HTML信息格式化; 5) 转成XML格式数据。
本系统主要是通过htmlparser解析heritrix爬取下来的许多html文件,通过相关正则表达式知识,遍历解析html信息,再把本来乱七八糟的html信息格式化成txt文本,方便java io流进行读写操作。
2.2.3 java语言
java语言Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏
控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
java[7]编程语言的风格十分接近C语言、C++语言。Java是一个纯粹的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于
回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担
忧。 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(byte code),然后依赖各种不同平台上的虚拟
机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的性能。
编辑Java源代码可以使用任何无格式的纯文本编辑器,在Windows操作系统上可以使用微软记事本(Notepad)、EditPlus等程序,在Linux平台上可使用vi工具等。
Java是本系统前台及后台以及爬虫、页面解析技术的基础语言,通过运用java编写的程序实现前台的功能如:登入,注册,论坛帖子发布,会员资源
管理等等,而后台主要实现后台会员管理,论坛管理,信息录入等等功能。
2.2.4 java io流技术
流[8] [9]是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
本系统主要是输入流InputStreamIO及输出流outputStreamIO实现对
txt文本信息的读取及输入到数据库中。 1.输入字节流InputStream
1)InputStream 是所有的输入字节流的父类,它是一个抽象类。
2)ByteArrayInputStrea、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。
3)ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装
饰器模式的主角)。 2.输出字节流OutputStream
1)OutputStream 是所有的输出字节流的父类,它是一个抽象类。 2)ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据。
3)ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。
本系统利用输入字节流InputStream和输出字节流OutputStream通过
file类实现对需要读取的文件夹进行遍历的操作,File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。File
类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。
2.2.5 JDBC技术
JDBC[10](Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,简单说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。
在使用jdbc[11]技术是,系统需要引用sqljdbc4.jar包,通过建立java平台与sql数据库的数据连接,从而使得赛事信息的查看等的展现。
第3章 系统分析与设计
3.1 功能需求
3.1.1 系统数据流图
系统流程图(System Flowchart)是描绘系统物理模型的传统工具。它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序、文件、数据库、表格、人工过程等),表达信息在各个部件之间流动的情况。
在本系统中,主要分为前台和后台两大模块,从对象上区分也 可以分为会员功能,管理员功能以及游客功能。对于一般的未注册的游客,只能享受赛事信息的浏览,赛事信息的检索以及赛事网站的分享功能。对于已经注册了的会员,除了享受信息浏览,检索等一般游客的功能,同时,享有个人空间,个人空间中实现已注册个人信息的修改,论坛发帖,赛事信息邮箱的订阅,以及相关赛事的上传与下载的权利。对于管理员,主要是后台的论坛管理,包括论坛帖子的添删改查,用户管理及用户信息的添删改查,以及赛事信息的管理,同样是赛事的添删改查。最后是会员或是管理员的登入后,依据正确的用户名和密码实现完一系列操作即可安全退出登入,反之如用户名、密码出错即登入败。
在后台管理员的赛事信息管理中,还包括了爬虫管理的功能,其中需要管理员开启服务器中的heritrix程序,根据需要爬取的网站,可以一次性或是多次输入需要爬取的网站,再通过后台的htmlparser遍历解析出文本文件和.jpg、 .gif等图片,再通过传入数据库java io流呈现在后台的信息管理当中 ,最后管理员可将已经传入数据库的赛事信息进行分类的方式上传至前台网站。值得一说的是,赛事过期后管理员可根据赛事信息上传的时间分批进行赛事信息的删除,或是根据赛事上传的时间,越是晚更新越排前台网站的前端。系统数据流图如图3.1和3.2所示:
图3.1 系统数据流图
图3.2 系统数据流图
3.1.2 系统状态图
前台游客需要注册成为用户,可以享受更多功能。游客点击注册,正确填写信息后核对成功注册完成,反之注册失败。注册成功则可进行前台登入,成功后可以享受邮箱订阅、查看信息、发帖、论坛删帖、赛事查询、资料下载等功能。用户在处理的这些个人功能时,需要结合数据库查询,如资料的下载上传或是赛事的上传需要通过数据库匹配,以实现用户积分的增减,为下次的操作提供基础。而用户赛事的上传也需要后台管理员的审核,通过审核,则可展现在网站前台页面上。前台系统状态图如图3.3所示:
图3.3 前台系统状态图
后台管理员需要登入后台,通过登入成功可以享有后台的用户管理包括用户添加以及删除、论坛帖子管理包括帖子的添加与删除、信息录入、爬虫管理即更新爬虫信息等。管理员执行任何一种管理功能时,会出现两种不同状态:操作成功和操作失败。如在操作发帖功能时,当操作符合后台要求时,操作成功,后台正常发布帖子;反之,失败,后台重新返回发布帖子页面。后台系统状态图如图3.4所示:
[信息添加失败]
3.4 后台系统状态图
3.2 功能介绍
前台操作模块主要是会员操作功能
(1)登入模块,通过注册登入,享有个人空间,会员资料的修改、添加; (2)个人中心模块,赛事资料上传,赛事信息的上传(需后台审核),论坛帖子的发布、修改与删除,邮箱订阅,获取最新赛事信息;
(3)信息模块,主要是浏览赛事信息,包括赛事信息、资料信息、赛事达人信息以及论坛帖子的浏览与回复;
后台操作模块包括管理员能够实现的功能(对数据库的操作)
(1)用户管理:实现对用户的增加,删除,修改,查看。 (2)比赛信息管理:实现对信息的更新,发布,删除。 (3)论坛管理:实现对帖子的删除,管理。
(4)邮箱管理:对已进行邮箱订阅的用户的邮箱进行统一管理,以便信息统一和及时发送。
(5)上传下载的管理:对用户所进行的上传下载进行管理,不合法的内容进行屏蔽或删除。
(6)爬虫管理:对从网上爬来的的信息进行修改、删除和分类,对于一些错误的信息进行修改,对于一些过期的、多余的和杂乱的信息进行删除,对于关于比赛的信息进行统一分类,把错误率降到最低,便于用户查阅。系统功能
模块图如图3.6所示:
图3.6功能模块图
3.3 概念结构
3.3.1 概念结构设计
在本系统中,实体主要包括管理员、会员和游客三大种类,联系框包括操作、管理等,实现对属性的操作,属性包括账号、密码、上传下载等。实线则是表示属性与实体之间的联系。
前台中,游客可享受信息浏览查看与注册等功能,而会员在此基础上可以享受更多功能,因此会员都存在一对多的关系,包括通过操作实现上传、下载、查看、更新等多个属性。后台中,管理员通过操作属性发布赛事信息、更新赛事信息以及删除赛事信息。同时可以直接管理用户信息,包括添加用户,删除用户等等。因此可知一个管理员也可以存在一对多的关系,管理员可以包扩赛事、帖子、用户等等的属性。而相对的,一个属性只能联系一个实体实现其数据的联系。E-R图如图中3.5所示:
图3.5 ER图
3.3.2 逻辑结构设计
由上述概念结构ER图可知,关于用户所对应的包括了用户信息、帖子、赛事信息等等属性。本节则说明相关属性的数据联系所对应的表格。都是通过后台进行管理的。后台的数据表包括了用户信息表,信息录入信息表包括(科技创新)内容信息表、(影视歌舞)内容信息表、(艺术爱好)内容信息表、(手机网络)内容信息表、(体育竞技)内容信息表、(自我展示)内容信息表、发布赛事信息表、信息筛选内容信息表。信息录入表中的几大赛事信息表指定了信息编号、信息内容以及、信息标题等名称。信息编号是设置为自动增长主键,用的是int型,而信息内容则是设置为Max最大的长度实现内容的完整输入。
信息筛选表除了信息编号设置成主键,内容最大长度外,还存放了网页地址名称,方便存入爬取下来的网页地址,图片地址,即可以重复使用的图片地址资料,以及更新时间,方便后台及时更新赛事信息,时间是数据库在存入资料时自动生成的,类别则是方便爬取不同网站类别而设定的,类别一般是同种网站使用同一种类别。
最后是发布赛事的信息表,方便前台用户的发布,因此多了发布的用户名。此项功能是为了方便后台管理员的查看与审。后台数据表如表3.1-3.8所示:
表 3.1 (科技创新)内容信息表
表 3.2 (影视歌舞)内容信息表
表 3.3 (艺术爱好)内容信息表
表 3.4 (手机网络)内容信息表
表 3.5 (体育竞技)内容信息表
表 3.6 (自我展示)内容信息表
表 3.7 发布赛事信息表
表 3.8 信息筛选内容信息表
第4章 模块实现
4.1 爬虫模块
爬虫模块是本系统的核心技术,它的实现使得系统从一个只能人工复制粘贴别的网站的系统,变成可以按时遍历,全面、方便、针对性更强搜索信息的半自动化系统。
它的最出色之处在于良好的可扩展性,方便用户实现自己的抓取逻辑,开发出适合的赛事信息系统。
4.1.1 设计事项
由于Heritrix采用了模块化的设计,所以用户在运行时选择要用的模块。它由核心类(core classes)和插件模块(pluggable modules)构成。核心类可以配置,但不能被覆盖,插件模块可以由第三方模块取代。因此可用实现了特定抓取逻辑的第三方模块来取代默认的插件模块,从而满足抓取的需要。
同时,需要扩展 FrontierScheduler 来抓取特定网站FrontierScheduler 是 org.archive.crawler.postprocessor 包中的一个类,它的作用是将在
Extractor 中所分析得出的链接加入到 Frontier 中,以待继续处理。在该类的 innerProcess(CrawlURI) 函数中,首先检查当前链接队列中是否有一些
属于高优先级的链接。如果有,则立刻转走进行处理;如果没有,则对所有的链接进行遍历,然后调用 Frontier 中的 schedule() 方法加入队列进行理。
此外,还需要向heritrix中添加自己的extractor。很明显,heritrix内嵌的extractor并不能够很好的完成所需要的工作,是因为在解析页面是,常常有特定的需要,比如,可能只想抓取某种格式的链接,或是抓取某个特定格式的文本片断,heritrix所提供的大众化extractor只能将所有信息全部抓取下来,所以,系统需要写一个类,继承extractor的基类。
4.1.2 操作界面
目前 Heritrix 的最新版本是 1.14.4,以下是heritrix1.14.4的配置安装过程:
1.首先在 myeclipes中新建 Java 工程 heritrix1。 2.导入库类中
Heritrix 所用到的工具类库都在 heritrix-1.14.4-src\lib 目录下,需要将其导入 heritrix1 工程。
1)将 heritrix-1.14.4-src 下的 lib 文件夹拷贝到 heritrix1 项目根目录;“Configure Build Path …”,然后选择 Library 选项卡,单击“Add JARs …”,加载数据图如图 4.1所示:
图4.1 加载数据图
2)在 heritrix1工程上右键单击选择“Build Path”。
3)在弹出的“JAR Selection”对话框中选择 MyHeritrix 工程 lib 文件夹下所有的 jar 文件,然后点击 OK 按钮。如图4.1所示。 3. 拷贝源代码
1)将heritrix-1.14.4-src\src\java 下的 com、org 和 st 三个文件夹拷贝进 heritrix1 工程的 src 下。这三个文件夹包含了运行 Heritrix 所必须的核心源代码。
2)将heritrix-1.14.4-src\src\resources\org\archive\util 下的文件 tlds-
alpha-by-domain.txt 拷贝到 heritrix1\src\org\archive\util 中。该文件是一个顶级域名列表,在 Heritrix 启动时会被读取。
3)将 heritrix-1.14.4-src\src 下 conf 文件夹拷贝至 Heritrix 工程根目录。它包含了 Heritrix 运行所需的配置文件。
4)将 heritrix-1.14.4-src\src 中的 webapps 文件夹拷贝至 Heritrix 工程根目录。该文件夹是用来提供 servlet 引擎的,包含了 Heritrix 的 web UI 文件。需要注意的是它不包含帮助文档,如果想使用帮助,可以将
heritrix-1.14.4.zip\docs中的 articles文件夹拷贝到 MyHeritrix\webapps\ admin\docs(需新建 docs 文件夹)下。或直接用 heritrix-1.14.4.zip 的 webapps 文件夹替换 heritrix-1.14.4-src\src 中的 webapps 文件夹,缺点是这个是打包好的 .war 文件,无法修改源代码。
拷贝完毕后的 MyHeritrix 工程目录层次如图 4 .1.4所示。这里运行 Heritrix 所需的源代码等已经准备完备,下面需要修改配置文件并添加运行参
数。
4. 修改配置文件
conf 文件夹是用来提供配置文件的,里面包含了一个很重要的文件:heritrix.properties。heritrix.properties 中配置了大量与 Heritrix 运行息息相关的参数,这些参数的配置决定了 Heritrix 运行时的一些默认工具类、Web UI 的启动参数,以及 Heritrix 的日志格式等。当第一次运行 Heritrix 时,只需要修改该文件,为其加入 Web UI 的用户名和密码。设置 heritrix.Cm dline.admin = admin:admin,“admin:admin”分别为用户名和密码。然后
设置版本参数为 1.14.4。修改用户信息图如图4.2所示所示:
图4.2 修改用户信息图
5. 配置运行文件
“Run Configurations”,确保 Main 选项卡中的 Project 和 Main
class 选项内容正确。其中的 Name 参数可以设置为任何方便识别的名字。在 MyHeritrix 工程上右键单击选择“Run As”。
然后在 Classpath 页选择 UserEntries 选项,此时右边的 Advanced 按钮处于激活状态,点击它,在弹出的对话框中选择“Add Folders”,然后选择 MyHeritrix 工程下的 conf 文件夹。
5. 创建网页抓取任务
“Java Application”,如果配置正确,会在控制台输出启动信息找到
org.archive.crawler 包中的 Heritrix.java 文件,它是 Heritrix 爬虫启动的入口,右键单击选择“Run As”。运行图如图 4.3所示:
图4.3 运行图
至此heritrix已经成功安装配置完毕。
接下来需要运行文件,本系统在拓展完成FrontierScheduler和向heritrix中添加自己的extractor。登入爬虫系统,写入需要爬取的网站地址相关信息,爬虫界面图如图4.4所示:
图4.4 爬虫界面图
首先点击“Modules”按钮,在相应的页面为此次任务设置各个处理模块,一共有七项可配置的内容,这里我们只设置 Crawl Scope 和 Writers 两项,参数设置图如图4.5所示:
图4.5 参数设置图
下面简要介绍各项的意义。
1)Select Crawl Scope:Crawl Scope 用于配置当前应该在什么范围内抓取网页链接。例如选择 BroadScope 则表示当前的抓取范围不受限制,选择 HostScope 则表示抓取的范围在当前的 Host 范围内。在这里我们选择
org.archive.crawler.scope.BroadScope,并单击右边的 Change 按钮保存设
置状态。
2)Select URI Frontier:Frontier 是一个 URL 的处理器,它决定下一个被处理的 URL 是什么。同时,它还会将经由处理器链解析出来的 URL 加入到等待处理的队列中去。这里我们使用默认值。
3)Select Pre Processors:这个队列的处理器是用来对抓取时的一些先决条件进行判断。比如判断 robot.txt 信息等,它是整个处理器链的入口。这里我们使用默认值。
4)Select Fetchers:这个参数用于解析网络传输协议,比如解析 DNS、
HTTP 或 FTP 等。这里我们使用默认值。
5)Select Extractors:主要是用于解析当前服务器返回的内容,取出页面中的 URL,等待下次继续抓取。这里我们使用默认值。
6)Select Writers:它主要用于设定将所抓取到的信息以何种形式写入磁盘。一种是采用压缩的方式(Arc),还有一种是镜像方式(Mirror)。这里择简单直观的镜像方式:org.archive.crawler.writer.MirrorWriterProcessor。
7)Select Post Processors:这个参数主要用于抓取解析过程结束后的扫尾工作,比如将 Extractor 解析出来的 URL 有条件地加入到待处理的队列中去。这里我们使用默认值。
进入modules即可添加自己需要的RaceExtractor,和FrontierSchedule
ForRace,储存方式为镜像存储。添加自己的RaceExtractor如图4.6和添加FrontierScheduleForRace如图4.7所示:
图4.6 添加RaceExtractor图
图4.7 添加FrontierScheduleForRace图
进入Settings进行设置。修改heritrix的版本号和需要爬取的网址,添加一个邮箱地址,可以不是真的邮箱地址。
最后点击Submit job,创建项目进行爬取即可,以下是爬取下来的网页信息。网页信息图如图4.8所示:
图4.8 网页信息图
4.1.3 核心代码
1.中央控制器是一次抓取任务中的核心组件,他将决定整个仍无的开始和
构造函数,
第一个正则式,适用于匹配cdrace信息的格式
第二个正则式,则是用于匹配所有的
将链接对象先转成字符串。
再通过此段代码取得当前链接的返回字符串,以方便对内容进行分析与使用,如果没有抓取到就先返回,抓取到就先将链接返回的内容转成字符串,再将字符串内容进行正则匹配,取出链接的信息,若是找到一个链接,判断他是否是cdrace的信息格式,是,加入队列,以备后续处理。
创建自己的FrontierSchedulerForRace来继承FrontierScheduler。
在原FrontierSchedule中,首先检查当前链接处理后的结果集中是否有一些属于高优先级的链接,如果是,则转走进行处理,如果没有,则对所有结果进行遍历,然后调用Frontier中的schedule方法加入队列进行处理。
这里,除去所有的扩展名为.zip、.rar、.xls、robots.txt、dns的链接(即不下载这类的文件)。可以通过几成FrontierSchedule,并重写内部的schedule方法达到我们的需要。这样,此次heritrix在执行任务时,遇到这样的文件,就会跳过抓取,从而达到对URL链接进行筛选的目的。
4.2 页面解析文本信息入库模块(htmlparser)
4.2.1设计思想 htmlparser是一个纯的java写的html(标准通用标记语言下一个应用)解析的库,它不依赖于其它的java库文件,主要用于改造或提取html。它能超高速解析html,而且不会出错。现在
htmlparser最新版本为2.0。毫不夸张地说,htmlparser就是目前最好的html解析和分析的工具。
无论你是想抓取网页数据还是改造html的内容,都可以使用htmlparser。经过遍历解析文本文件,把文件中.txt文件全部存入数据库中,运用java io 技术即可。
4.2.2操作界面
以下是网络爬虫(heritrix)爬取下来的比赛信息的html页面文件。解析出html文件图如图4.9所示:
图4.9 解析出html文件图
通过htmlparser遍历解析出html文件:运行Extractor.java,即可获取data文件中的txt文件于race文件中,分别是文本文件news和image中,txt文件图如图4.10和图片文件图如图4.11所示:
图4.10 txt文件图
图4.11 图片文件图
接下来程序要将其存入数据库中race中,新建的表Race中,数据表格图如图4.12所示:
图4.12 数据表格图
运行HH.java运用java io流技术将解析的txt文本文件遍历写入数据库中,运行文件图如图4.13所示:
图4.13运行文件图
至此,解析并存入数据库的步骤就完成了。数据库信息更新图如图4.14所示:
图4.14数据库信息更新图
4.2.3 核心代码
1,需要运行写入main函数的 Extractor后,控制台输出信息,获得所定义的目标目录下并没有相应的txt文档与图片生成。
Newline表示所有结果的输出路径。
outputPath表示当前正在被处理的文件。
inputFilePath表示当前所有被抓取的网页的镜象根目录在Heritrix用mirror目录表示。
mirrorDir用于存放被处理过后的产口的图片的目录,通过构HTMLParser
的实例。
HASH_ALGORITHM = "md5";表示对图片路径进行哈希的算法,这里
SEPARATOR表示装载需要的网页文件。
获取输出的路径getOutputPath(),通过设置输出的路径,通常在初始化Extractor时就应该做。使用正则来匹配并获得网页中的字符串getProp(),public abstract void extract()。抽象方法,用于供子类实现。 其功能主要是解释网页文件将产品信息保存到。再获取正在处理的文件的路径getInputFilePath()从mirror目录下拷贝文件至所设定的图片目录,该方法可能需要被改变。
以上是Main函数,指定需要解析的目录文件,指定需要生成文本文件和图片文件的地址。java io技术实现文本文件的输入数据库功能。
定义图片地址imageURI。类型category,更新时间updatetime,内容
读取信息,并写入数据库中,至此遍历下的文件即可输入到数据库中。 content,链接line,标题fname等等。同时需要初始化。
4.3 信息筛选上传、信息查看删除的模块
4.3.1 设计思想
经过以上步骤,最后一步——信息的录入和筛选,查看和删除,同时管理员还可以自行的添加本网站独家赛事信息。
比赛信息集成系统主要将赛事分成了影视歌舞、艺术爱好、科技创新、手机网络、体育竞技、自我展示等几个类别。所以,相对应的数据库中,也要开设
相对应的表格。
后台是通过所展现的赛事信息进行分类筛选存储、实现、前台展示。信息的删除,根据管理员的个人自主的将过期的赛事或是错误信息进行删除,可同步删除数据库的信息,减少数据库的负载量。
最后管理员可自主发布独家赛事信息,后台中嵌入一个js特效的文本文档,方便编辑赛事信息。
4.3.2操作界面
1.信息录入
已知,赛事信息已存入数据库中,点击“赛事筛选”即可。需筛选信息图如图4.15所示:
图4.15需筛选信息图
2.信息筛选
进入筛选页面信息筛选完,该信息奖不再显示,信息筛选图如图4.16所示:
图4.16信息筛选图
选择标题对应的赛事类别,点击,进行编辑面的简单修整,如“土豆姐姐”征集土豆广告用语,可以选择艺术爱好的类别中,点击艺术爱好,进入编辑。修整赛事图如图4.17所示:
图4.17修整赛事图
修整后点击上传,一下即可看到后台相关改则赛事信息的显示,信息筛选成功图如图4.18所示:
图4.18信息筛选成功图
以下是该则消息的前台相关赛事的显示信息内容的展示,信息展示图如图
4.19所示:
图4.19 信息展示图
以上完成了信息的筛选以及上传,同样的后台不仅可以上传这些筛选好了的信息及图片,管理员还能手动上传消息,点击赛事类别,在其中添加赛事信息即可,后续与信息筛选一样。
3.信息的删除,删除信息图如图4.20所示:
图4.20删除信息图
点击删除即可删除信息。
4.3.3 核心代码
在这个模块中,主要是运用了Struts2模式的,通过一些信息的添删改查实现,较之前面的爬虫模块和文本解析模块简单的多,其中在Struts2模式中,我们需要注意的事struts.xml的配置。
以上表明赛事信息分类处理页面的配置,如果返回“suc”则代表分类为成功,功能进行处理,如返回“fail”则不成功,不执行该功能。
定义,需要存入的数据tag、recontent、title、id(数据库自动生成)等,并初始化。这些名称都需要在bean文件中显示。
以上是对信息的存储,主要是,存储相对应信息的的标题和内容,其他的比如更新时间和赛事编号,则由数据库自动生成。
该方法则可以实现信息的存入数据库,insert into ys(tag,recontent) 、values('"+m+"','"+n+"')表示的就是sql语句中传入的参数相对应的插入到ys(影视)这个表格中,其中需要注意的是,参数不可以随意不对应位置,要不然数据存入也会出错。
以上是对页面中的分页进行准备,如上所述初始化的页面数为零,默认一页有六条信息的分页,一页现有领条信息。
总结
比赛信息集成系统,通过了长达半年的时间完工的,主要是系统本身包括了前台网站,用户中心,网站论坛以及后台系统等等较大模块组成,也较为庞大,同时开发工作也较为复杂。
我主要负责的是网站的核心功能后台的模块——爬虫系统,针对这一块的开发,从需求分析到设计,我都遇到了许多难题,就是没有接触过爬虫系统,开发主要是通过书籍和网络请教的方式下完成的,其实搭建爬虫的框架不是很难,但是如何从爬取下来的信息中如何提取赛事信息并且解析筛选传入后台着实困难,经过上网求教,书籍的详读,终于在两个月的时间开发出包括爬虫、页面解析以及筛选上传的全套后台系统。
因此,本系统中,我主要运用了Struts2模式运用java+sql+heritrix+
Htmlparser+java io等技术。其中java和sql技术是一般系统中必备技术,主要实现是数据库与客户端的互联与数据的联系是的网站是一个动态的网站,而java技术是实现系统中一般功能的实现,主要是添删改查的功能。Heritrix爬虫技术实现是为了海量爬取对于赛事系统需要要的页面信息,为以后的信息上传与筛选提供素材。Htmlparser,遍历解析heritrix爬取下来的海量信息,便于信息的数据上传至后台,这是一个中间功能,虽然不能呈现最终效果但是必不可少。最后是java io流技术,用于读取解析好的文本文件于数据库实现最后的信息筛选与上传至前台。通过该系统后台的管理员可以半自动化的实现海量信息的上传与筛选,更好的满足了比赛信息集成系统赛事信息的需求量,是的网站信息更为丰富,在市场上更具竞争力。然而本系统也存在着不可忽视问题,就是操作其系统不可避免的会用到开发平台进行相关功能的开启,同时并没有实现系统的全自动化,因此对于不懂计算机软件的管理员们来说比较难于操作。而信息系统的全自动化与傻瓜式操作是本系统需要向前改进的方向。
针对我个人来说,开发此次系统,花费了巨大的耐心与时间,同时也获得了许多开发项目的经验。首先,团队合作真的很重要,从开始的需求分析、数据库设计到后来的设计制作,我们团队因为首次合作出现了许多问题,比如数据库的不统一,团员项目分配不协调,各个组员的项目风格不统一等等。不过通过几个月的磨合,组员合作开始统一,而项目进展也加快了。其次,开发系统需要巨大的耐心与锲而不舍的精神,因为刚开始我开发的部分出现了许多依靠我个人一时难以解决的问题,当时,因为屡屡失败,而变得灰心退缩,至此系统开发的进展停滞许久,最后,耐下心来一步一步的分析问题,勇于提问才
最终完成了系统。最后,需要感谢彭雅丽老师的教导与帮助,组员们的相互帮助与协作,及网络上各位牛人的解答,使得我最终圆满完成了一次软件开发!
参考文献
参考文献
[1] 邱哲.开发自己的搜索引擎:Lucene+Heritrix(第2版)[M].北京:清华大学出版社, 2010.1-210.
[2] 王琳琳.基于HTML Parser的Web信息提取技术[J].北京邮电大学,2007,(3):12-310.
[3] 李伟,黄颖. 基于HtmlParser的网页信息提取[J].兵工自动化,2007,(1):1-22.
[4] 杨晓燕.Java面向对象程序设计[M].北京:电子工业出版社,2012. 30-210.
[5] 萨师煊,王珊.数据库系统概论[M].北京:高等教育出版社,2002. 85-100.
[6] 刘高军,夏景隆.基于Heritrix的网络爬虫研究与应用[J].软件导刊,2013,(5): 1-355.
[7] 雍俊海.Java程序设计教程(第2版)[M].北京:清华大学出版社,2007,
(8): 2-220.
[8] CraigLarman.UML和设计模式应用[M].北京:机械工业出版社,2003.1-15.
[9] BruceEckel. JSP编程思想[M].北京:机械工业出版社,2003.1-30.
[10] 胡百敬,姚巧玫.SQL Server 2005 数据库开发详解[M].北京:电子工业出版社,2006.1-310.
[11] 李云清,杨庆红,揭安全.数据结构(第2版)[M].北京:人民邮电出版社,2009.1-99.