java課程設計報告—網絡爬蟲搜索引擎_第1頁
java課程設計報告—網絡爬蟲搜索引擎_第2頁
java課程設計報告—網絡爬蟲搜索引擎_第3頁
java課程設計報告—網絡爬蟲搜索引擎_第4頁
java課程設計報告—網絡爬蟲搜索引擎_第5頁
已閱讀5頁,還剩16頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論