




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-PAGE . z.- - - z - 学 号:课 程 设 计题 目网络爬虫搜索引擎学 院管理学院专 业信息管理与信息系统班 级姓 名指导教师王新201年7月4日课程设计任务书学生:指导教师: 王新 工作单位:信息管理与信息系统系 题 目: 网络爬虫搜索引擎初始条件:合理应用Java相关知识与编程技能,结合UML面向对象设计,解决信息管理领域的实际问题,如学生成绩管理、学籍管理、图书借阅管理、自动存取款机、通信录管理、商品销售管理、医院门诊管理、火车订票管理、影院自动售票、世界杯足球比赛管理、人力资源管理、酒店前台管理、房产中介管理、停车收费管理等。要求完成的主要任务: 包括课程设计工作量及其
2、技术要求,以及说明书撰写等具体要求1进展需求分析,撰写需求文档,绘制用例图。2识别需求文档中的类,建模类,初步绘制类图之后逐渐完善。3确定、建模类的实例变量。4确定、建模类的方法。5假设有需要,在系统中参加继承与多态。6将UML图转换成Java代码框架。7设计算法,假设有复杂的数据构造需求,使用相应集合框架。8设计数据访问层,假设有数据持久化需求,使用数据库/文件。9添加表示层,假设程序运行在桌面,使用图形用户界面。10实现完整的系统,最终Java源代码至少在300行以上。11进展测试,并给出相应结果。课程设计报告中要求详细描述思路、步骤、方法、实现、问题及解决过程、操作说明、测试及结果。时间
3、安排:12014年6月23日 课程设计选题、查阅资料22014年6月24日25日UML面向对象设计32014年6月26日7月1日 Java程序设计与代码调试42014年7月2日 改良、完善、测试系统52014年7月3日7月4日上午 撰写、提交课程设计报告62014年7月4日下午 课程设计辩论指导教师签名: 年 月 日系主任或责任教师签名: 年 月 日网络爬虫搜索引擎1工程介绍1.1开发背景该工程软件开发的意图是开发出一款网络爬虫软件。应用目标为搜集网络信息,便于查询使用。在如今的BIG DATA时代,网络信息庞大而又复杂,用户很难直接从中获得需要的信息。网络爬虫软件就是将这些信息收集并整理,当
4、用户发起搜索请求时,该系统可将用户最需要的信息反应给用户。1.2用户的特点本软件为免费软件,可供所有可使用互联网的用户使用。最终用户只需掌握根本的上网技术即可,操作人员的主要工作是启动和关闭效劳器,只需掌握根本的电脑使用方法即可。维护人员需要专业的程序员,懂得Java的网络编程以及计算机网络根底,教育水平在专科以上。软件的预期工作时间为24h/日。组织构造图及用户角色如图表1-1所示:1.3需求分析各子模块功能的描述本系统共分为三大模块:爬虫模块、数据库模块和搜索模块,也就是后台、前台和数据库。每一个模块有各自的分工,最后三大模块集合在一起构成一个完整的网络爬虫系统。各个子模块的详细功能如下:
5、爬虫模块第一个模块为爬虫模块。爬虫模块的主要任务是负责寻找网页,并将网页的URL和关键字提取出来。此模块又详细分为两大模块:效劳器模块和正则引擎模块,这两个模块分别负责上述的两个功能。效劳器模块向*个种子URL发送请求,或得其页面容;正则引擎模块将效劳器获取的页面用正则表达式对其进展分析,截取其中的URL和关键字,然后再将URL传递给效劳器模块。系统按照这样的方式不断的抓取网页并进展分析,最后将结果存进数据库。搜索模块第二个模块是搜索模块,用户在搜索界面输入关键字,然后系统在数据库中搜索对应的关键字,最后将结果返回给用户。此模块又分为搜索界面和结果界面。搜索界面是首页,用户在此界面中输入想要搜
6、索的关键词,这些关键词将被此页面记录下来传递到数据中进展搜素。结果页面是数据库结果的承受者,当数据库完成搜素后会将结果传递给次页面,然后结果页面会将结果呈现给用户。数据库模块数据库模块在整个系统中起到存储和桥梁作用。爬虫模块将搜索的结果整理完成后存入数据库,搜索模块从数据库中获取需要的信息并呈现给用户。1.4对非功能性的需求精度 该系统的输入为一个字符串,里面包含了一个或多个关键字,长度在38个汉字以,超过的局部将被直接舍弃。输出的数据要求包括的URL和页面简介,按照页面容与搜索容的匹配程度来排序。时间特性要求 响应时间0.01s更新处理时间0.1数据的转换和传送时间0.1s灵活性该系统运用的
7、主要语言是Java,由于Java是一门跨平台的语言,所以本系统的兼容性比拟强,只要配置了Java环境就可以运行。当该系统与数据库MySQL的接口发生变化时,系统在重新加载了新的驱动后要能够正常运行。输人输出要求输入:由用户输入搜索关键字,关键字类型为合法字符。输出:显示结果列表或提示信息,包含页面地址、页面标题、页面描述的条目列表或字符串提示信息。故障处理要求出错输出信息:根据不同的错误提供不同的错误提示信息。例如无网络连接、无法检索到结果。出错处理对策:1一般错误:显示错误信息,提示用户重新操作 2严重错误:重新启动,必要时启用备份恢复数据其他专门要求如用户单位对平安的要求,对使用方便的要求
8、,对可维护性、可补充性、易读性、可靠性、运行环境可转换性的特殊要求等。 1)强健性:如果用户在发送搜索请求后与效劳器连接中断,在用户重新连接后并重新请求时,系统应快速将信息反应给用户。2)可维护性:新的管理员应该可以在10分钟以掌握关闭和开启效劳器等根本操作。3运行环境可转换行:任何装有浏览器的系统都应该可以访问效劳器。当效劳器更换操作系统时,在部署好Java环境后应可以马上运行。2程序设计2.1总体设计思想本软件通过客户端浏览器,用户设置自己的爱好,并通过 传给效劳器,效劳器接收信息执行响应操作。2.3程序设计总体框图系统功能层次模块图如图1-2所示图表1-SEQ 图表 * ARABIC2
9、系统层次模块图2.4程序详细设计1RecordDAOPro*y类UML设计2IRecordDAO类设计说明3DatabaseConnection类设计说明(4)RecordDAOImpl类设计说明5Record类设计说明6HtmlHelper类设计说明7SpiderThread类设计说明8DAOFactory类设计说明9Page类UML设计10测试类UML设计7主体程序UML类图源代码局部:RecordDAOPro*y.java代码import java.util.ArrayList;import .engine.dao.impl.RecordDAOPro*y;import .engine.p
10、o.Record;import .engine.util.HtmlHelper;/* author */public class ResultController private ResultController ()private static ResultController resultController;/* return ResultController */Public static synchronized ResultController getResultController()if(resultController = null)resultController = ne
11、w ResultController();return resultController;/* * param keyWord * return Record * throws E*ception*/public ArrayList queryResult(String keyWord) throws E*ception String keyWords = keyWord.split(s);ArrayList list = new ArrayList();RecordDAOPro*y recordDao =null;for(int i=0; ikeyWords.length;+i)keyWor
12、d = keyWordsi;recordDao = new RecordDAOPro*y();list.addAll(recordDao.getRecord(WHERE recordTitle LIKE % + keyWord + %);recordDao = new RecordDAOPro*y();list.addAll(recordDao.getRecord(WHERE recordContent LIKE % + keyWord + %);return list;User.java代码import java.io.Serializable;public class User imple
13、ments Serializableprivate static final long serialVersionUID = 00L;private String no; private String name; private Integer age; private String se*; private String phone; private String imagePath;public String getNo() return no;public void setNo(String no) this.no = no;public String getName() return
14、name;public void setName(String name) = name;public Integer getAge() return age;public void setAge(Integer age) this.age = age;public String getSe*() return se*;public void setSe*(String se*) this.se* = se*;public String getPhone() return phone;public void setPhone(String phone) this.phone
15、 = phone;public String getImagePath() return imagePath;public void setImagePath(String imagePath) this.imagePath = imagePath;BusinessObject.java代码import java.util.List;publicclass BusinessObject int currentPos; User users; PropertiesUtil proutil;public BusinessObject() currentPos = 0; proutil = new
16、PropertiesUtil(config/telephone.dat); users = getAllUsers();public User getAllUsers() List list = proutil.getUsers();User users2 = new Userlist.size();for(int i =0;i0)currentPos -;return userscurrentPos;public User ne*t() if(currentPos users.length - 1)currentPos +;return userscurrentPos;public User
17、 last() currentPos = users.length - 1;return userscurrentPos;publicvoid saveUser(User user) proutil.save(user);users = getAllUsers();currentPos = Integer.parseInt(user.getNo() - 1; PropertiesUtil.java代码import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundE*ception;import jav
18、a.io.FileOutputStream;import java.io.IOE*ception;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.ArrayList;import java.util.List;import java*.swing.JOptionPane;public class PropertiesUtil private ObjectInputStream ois = null;private ObjectOutputStream oos = null;p
19、rivate List lstUsers = new ArrayList();private String fileName = null;public PropertiesUtil(String fileName)this.fileName = fileName; SuppressWarnings(unchecked)public List getUsers()try ois = new ObjectInputStream(new FileInputStream(fileName); lstUsers = (ArrayList)ois.readObject(); ois.close(); c
20、atch(FileNotFoundE*ception e) intRecord(); catch (ClassNotFoundE*ception e) e.printStackTrace(); catch (IOE*ception e) e.printStackTrace(); return lstUsers; public void save(User user)try oos = new ObjectOutputStream(new FileOutputStream(config/telephone.dat);int i;for( i = 0;i = lstUsers.size() lst
21、Users.add(user);/新增oos.writeObject(lstUsers);oos.flush();oos.close(); catch (IOE*ception e) e.printStackTrace();/* * 假设记录文件不存在,则初始化记录文件 */private void intRecord()/创立文件File f = new File(config/telephone.dat);try f.createNewFile(); catch (IOE*ception e1) e1.printStackTrace();/新建一条记录User u = new User()
22、;u.setNo(1);u.setName();u.setAge(0);u.setSe*(F);u.setPhone();u.setImagePath();try oos = new ObjectOutputStream(new FileOutputStream(config/telephone.dat);lstUsers.add(u);oos.writeObject(lstUsers);oos.close(); JOptionPane.showMessageDialog(null, 请重启本程序); System.e*it(0); catch (FileNotFoundE*ception e
23、1) e1.printStackTrace(); catch (IOE*ception e1) e1.printStackTrace();Test.java代码import java.io.FileNotFoundE*ception;import java.io.FileOutputStream;import java.io.IOE*ception;import java.io.ObjectOutputStream;import java.util.ArrayList;import java.util.List;public class Test private ObjectOutputStr
24、eam oos = null;private List lstUsers = new ArrayList();User u1 = null;User u2 = null;User u3 = null;public Test() try oos = new ObjectOutputStream(new FileOutputStream(config/telephone.dat);u1 = new User();u1.setNo(1);u1.setName(人物1);u1.setSe*(M);u1.setAge(11);u1.setPhone(111);u1.setImagePath(config
25、/demo8.jpg);lstUsers.add(u1);u2 = new User();u2.setNo(2);u2.setName(人物2);u2.setSe*(F);u2.setAge(22);u2.setPhone(222);u2.setImagePath(config/demo4.jpg);lstUsers.add(u2);u3 = new User();u3.setNo(3);u3.setName(人物3);u3.setSe*(F);u3.setAge(33);u3.setPhone(333);u3.setImagePath(config/demo2.jpg);lstUsers.a
26、dd(u3); catch (FileNotFoundE*ception e) e.printStackTrace(); catch (IOE*ception e) e.printStackTrace();public static void main(String args) Test t = new Test();try t.oos.writeObject(t.lstUsers);t.oos.close(); catch (IOE*ception e) e.printStackTrace();publicclass Result private String recordLink;priv
27、ate String recordTitle;private String recordAbstractContent;private String keywordTimes;public String getRecordLink() return recordLink;publicvoid setRecordLink(String recordLink) this.recordLink = recordLink;public String getRecordTitle() return recordTitle;publicvoid setRecordTitle(String recordTi
28、tle) this.recordTitle = recordTitle;public String getRecordAbstractContent() return recordAbstractContent;publicvoid setRecordAbstractContent(String recordAbstractContent) this.recordAbstractContent = recordAbstractContent;public String getKeywordTimes() return keywordTimes;publicvoid setKeywordTime
29、s(String keywordTimes) this.keywordTimes = keywordTimes;import java.sql.*;publicclass DatabaseConnection private Connection con=null;privatestaticfinal String DRIVER=.mysql.jdbc.Driver;privatestaticfinal String URL=jdbc:mysql:/localhost:3306/webengineuseUnicode=true&characterEncoding=utf-8;privatest
30、aticfinal String USER=root;privatestaticfinal String PASS=1234;public DatabaseConnection() throws E*ceptionClass.forName(DRIVER);con=DriverManager.getConnection(URL, USER, PASS);public Connection getConnection() throws E*ceptionreturn con;publicvoid close() throws E*ceptionif(con!=null)con.close();i
31、mport java.io.IOE*ception;import java*.servlet.Filter;import java*.servlet.FilterChain;import java*.servlet.FilterConfig;import java*.servlet.ServletE*ception;import java*.servlet.ServletRequest;import java*.servlet.ServletResponse;publicclass SetCharacterEncodingFilter implements Filter private Str
32、ing encoding;Overridepublicvoid init(FilterConfig filterConfig) throws ServletE*ception / TODO Auto-generated method stubthis.encoding = filterConfig.getInitParameter(encoding);Overridepublicvoid doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOE*ception, Servlet
33、E*ception / TODO Auto-generated method stubrequest.setCharacterEncoding(this.encoding);chain.doFilter(request, response);Overridepublicvoid destroy() / TODO Auto-generated method stubthis.encoding=null;import java.sql.*;import java.util.*;import .engine.dao.IRecordDAO;import .engine.po.Record;public
34、class RecordDAOImpl implements IRecordDAO SuppressWarnings(unused)private Connection con = null;SuppressWarnings(unused)private PreparedStatement stat = null;public RecordDAOImpl(Connection con) this.con = con;Overridepublicboolean insertRecord(Record record) throws E*ception int i = 0;String sql =
35、insert into Result(recordTitle,recordContent,recordLink) values(,);try PreparedStatement preStmt = con.prepareStatement(sql);preStmt.setString(1, record.getRecordTitle();preStmt.setString(2, record.getRecordContent();preStmt.setString(3, record.getRecordLink();i = preStmt.e*ecuteUpdate(); catch (SQL
36、E*ception e) e.printStackTrace();if (i = 1) returntrue;/ else returnfalse;Overridepublicboolean clearAll() throws E*ception Connection conn;boolean flag = false;String sql;try conn = con;sql = delete * from Result;flag = stat.e*ecute(sql); catch (E*ception e*) System.out.println(Error : + e*.toStrin
37、g();if (flag) returntrue; else returnfalse;Overridepublic ArrayList getRecord(String condition) throws E*ception ArrayList records = new ArrayList();String sql = select recordLink,recordTitle,recordContent from Result + condition;tryResultSet rs=con.createStatement().e*ecuteQuery(sql);while(rs.ne*t(
38、)Record record=new Record();record.setRecordLink(rs.getString(recordLink);record.setRecordTitle(rs.getString(recordTitle);String content = rs.getString(recordContent);if(content.length()=400)content = content.substring(0,400)+.;record.setRecordContent(content);records.add(record);catch (SQLE*ception
39、 e) e.printStackTrace();return records;public ArrayList getRecord(String where, int number)throws E*ception ArrayList records = new ArrayList();String sql = select recordLink,recordTitle,recordContent from Result where +where + limit + Integer.toString(number);tryResultSet rs=con.createStatement().e
40、*ecuteQuery(sql);while(rs.ne*t()Record record=new Record();record.setRecordLink(rs.getString(recordLink);record.setRecordTitle(rs.getString(recordTitle);String content = rs.getString(recordContent);if(content.length()=400)content = content.substring(0,400)+.;record.setRecordContent(content);records.
41、add(record);catch (SQLE*ception e) e.printStackTrace();return records;import java.util.ArrayList;import java*.servlet. . ServletRequest;import java*.servlet. . ServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForw
42、ard;import org.apache.struts.action.ActionMapping;import .engine.business.ResultController;import .engine.po.Record;import .engine.struts.form.GetResultForm;import .engine.util.PageController;publicclass GetResultAction e*tends Action public ActionForward e*ecute(ActionMapping mapping, ActionForm fo
43、rm, ServletRequest request, ServletResponse response) throws E*ception GetResultForm getResultForm = (GetResultForm) form;String keyWord = getResultForm.getKeyWord();if(keyWord = null|keyWord.equals()keyWord = (String) request.getSession().getAttribute(keyWord);ResultController resultController = Re
44、sultController.getResultController();String str = request.getParameter(PageInde*);if(str=null)str = 1;int currentPageInde* = Integer.parseInt(str);PageController pc = (PageController)request.getAttribute(pc);if(pc=null)pc = new PageController();ArrayList list = resultController.queryResult(keyWord);pc.setBigList(list);request.getSession().setAttribute(pc, pc);request.getSession().setAttribute(keyWord, keyWord);pc.setC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六一宠物活动方案
- 六一活动及端午活动方案
- 六一活动小剧场活动方案
- 六一活动艺术展活动方案
- 六一爬山活动方案
- 六一社团美术活动方案
- 六一节公司活动方案
- 六个一记者节活动方案
- 六月份彩金活动方案
- 兰溪拓展活动方案
- 青岛版(2024)小学科学一年级下册《木头》说课稿及反思
- 风力发电项目居间合同
- 课件:《马克思主义基本原理概论》(23版):第七章 共产主义崇高理想及其最终实现
- 网络空间中的群体行为分析-深度研究
- 间歇性胃管插管护理
- 统计业务培训
- 2025-2030年中国水利工程勘察设计市场运营状况与发展潜力分析报告
- 海康智慧工地解决方案
- 小学科学新教科版一年级下册全册教案(共13课)(2025春详细版)
- 自发性气胸PBL护理教学查房
- 2025年金华国企义乌市建投集团招聘笔试参考题库含答案解析
评论
0/150
提交评论