天天看點

分布式爬蟲和搜尋的設計與實作

爬取網站,采用流程節點,用來處理摘要計算、關鍵字計算、相似度計算、熱度計算。資料經過流程計算以後,落庫,建立反向索引。搜尋根據關鍵詞到反向索引表可以快速搜尋。

實作步驟

1.基礎工作:收集一些網址,作為爬蟲的入口。種子url表結構:

{

“_id” : ObjectId(“c54c4352310b3c”),

“urlId” : “io563784uiodf7e96bb9ij”,

“url” : “

http://bigcat.iteye.com/blog/33

”,

“deleteFlag” : “1”,

“createTime” : “20170505120012”,

“rootUrl” : “

http://bigcat2013.iteye.com

“deep” : 1.0

} urlId為随機生成,url為種子url,deleteFlag:0表示未删除1為已删除 rootUrl:根網站位址 deep:通路深度,深度越深表示層級越低。

2.基礎工作:整理行業類别,并設定類别的關鍵字(為後續網頁行業歸類做相似度計算依據)。行業類别表結構:

“_id” : ObjectId(“5a9ec8b0552310b3d”),

“urlId” : “io5636fbauiodf7e96bb9ij”,

“topicCode” : “IT”

} urlId為行業代表url topicCode:表示行業類别編碼

3.爬取網頁:jsoup工具分析、識别、稽核網頁的内容(例如:是否為廣告、内容過短),若内容稽核通過,則落庫。流程的第一個節點完成。流程表結構:

“_id” : ObjectId(“5aa00c0cd0c5e5df”),

“flowId” : “8315006ae8c03b1b648c”,

“urlId” : “d162bab5ebc467bb1f4”,

“nodeCode” : “UrlDataExtract”,

“startFlag” : “1”,

“endFlag” : “1”,

“seqNo” : 1.0

} flowId:流程ID urlId:網頁ID nodeCode:節點編碼 startFlag:流程開始标記 1:已開始 0:未開始 endFlag:結束标記 0:未結束 1:已結束 seqNo:流程節點序号(升序編号)

網頁資料表結構:

“_id” : ObjectId(“5aa2adbc5c6b736”),

“urlId” : “9bc15a1c0e54c1f03c27”,

“url” : “www.runoob.com/angularjs-http.html”,

“txt” : “AngularJS Http | 菜鳥教程 菜鳥教程 – 學的不僅是技術,更是夢想! 首頁 HTMLCSS JavaScript jQuery 更多……此處省略”,

“title” : “AngularJS Http | 菜鳥教程”,

“hots” : 30.0

} urlId:網頁ID url:網頁位址 txt:網頁摘要(限制500字以内) title:标題名稱 hots:表示搜尋熱度

4.關鍵詞抽取:網頁摘要内容生成,關鍵詞提取(Ikanalyzer開源)。關鍵詞存入關鍵詞表。關鍵詞表結構:

“_id” : ObjectId(“5aa00c779cc5e88a”),

“urlId” : “d162bab5edbc467bb1f4”,

“keyWord” : “資料庫”,

“counts” : 10.0

} urlId:網頁ID keyWords:關鍵詞描述 counts:關鍵詞出現次數。資料字典表:

“_id” : ObjectId(“5aa00ce99cceec5ec78”),

“wordId” : “9e83bed9f04bcb”,

“word” : “網絡”

} wordId:字ID word:字描述

5.反向索引建立:根據關鍵詞生成反向索引,将url對應的id存入倒序索引表。相似度表(用于計算行業歸類使用):

“_id” : ObjectId(“5aa00ce5ec89”),

“urlIdSeed” : “4506d40e0f3163d2”,

“urlId”:werqd09if3c0f39ijnh

“similar” : 30.0

} urlIdSeed:種子urlId urlId:網頁ID similar:相似度數值(100分為上限),倒序索引表:

“_id” : ObjectId(“5aa00ced0c5ec66”),

“urlId” : “e3a9c8d4d1e6e02”,

http://www.cnblogs.com/p/5.html/

“wordId” : “fa368b5b5b69e2230c”,

“title” : “Java 網絡爬蟲擷取網頁源代”,

“summary” : “過配置檔案将該請求轉換為網站首頁位址index.php”,

} urlId:網頁ID url:網址 wordId:關鍵詞ID title:标題 summary:摘要 hots:熱度

功能擴充

1、将爬蟲功能內建在jar包裡,資料存儲采用記憶體(HashMap),爬蟲和資料中心通訊,拉去種子url,爬取加工完成以後,将處理好的結果,推送給資料中心(通訊過程采用非對稱加密)。

2、資料中心通過消息隊列降低nosql壓力。

技術工具

springBoot、mongodb、kafka、dubbo、job。

git後端位址:

https://github.com/sijunx/mySpider

git前端位址:

https://github.com/sijunx/whatsUp

demo網址:www.dahansoft.com