歡迎來到 常識詞典網(wǎng) , 一個(gè)專業(yè)的常識知識學(xué)習(xí)網(wǎng)站!
[ Ctrl + D 鍵 ]收藏本站
答案 1:
從整體搜索引擎角度,分成三個(gè)子系統(tǒng):爬蟲(URL管理和調(diào)度下載解析等)、索引(用于全文檢索)、存儲(解析后的內(nèi)容和快照等);爬蟲子系統(tǒng)部分,又分為四個(gè)組件:Seeder- > Manager- > Harvester- > Collector(- > Seeder).1) Seeder負(fù)責(zé)URL管理,也就是定向網(wǎng)站-url,以及曾經(jīng)抓過的所有url,可擴(kuò)展存儲網(wǎng)頁指紋,歷史抓取信息等2) Manager負(fù)責(zé)調(diào)度,根據(jù)你的抓取策略(定時(shí)、增量、隨機(jī)等)從Seeder調(diào)取url生成抓取任務(wù);3) Harvester有多個(gè),競爭得到抓取任務(wù)并專心下載,下載后內(nèi)容傳遞給Collector;4) Collector有倆任務(wù),解析-tml、搜集新鏈接,并把解析后的內(nèi)容根據(jù)需要傳遞給索引系統(tǒng)和存儲系統(tǒng),把搜集的新連接傳遞給Seeder模塊。這個(gè)設(shè)計(jì)是參考了國外一些-實(shí)現(xiàn)的,個(gè)人感覺有幾個(gè)好處:a) 四個(gè)組件組成良性循環(huán),結(jié)構(gòu)清晰,分工和擴(kuò)展容易;b) Seeder+Manager 負(fù)責(zé)長期目標(biāo):指定的下載策略控制,根據(jù)不同的適用場景可以由不同的算法;c) Harvester+Collector 負(fù)責(zé)短期目標(biāo):充分發(fā)揮計(jì)算機(jī)資源(CPU/Memory/IO/網(wǎng)絡(luò))完成下載和內(nèi)容解析;幾點(diǎn)說明:1) URL去重可以放到Seeder來做,一個(gè)Bloomfilter就行;2) Harvester網(wǎng)頁下載實(shí)現(xiàn)可以用一些高效異步IO,比如java的NIO等,單個(gè)線程同時(shí)發(fā)起上千個(gè)并發(fā)下載沒有任何問題;3) Collecter網(wǎng)頁解析主要是個(gè)浪費(fèi)CPU的事情,一般只能開個(gè)線程池并發(fā)處理,為了提高解析效率,不在乎鏈接發(fā)現(xiàn)很全的情況下,可以考慮正則表達(dá)式解析(非???推薦);如果是圖片的話,Collector就好辦了,判斷下載完的資源如果是圖片,直接到存儲系統(tǒng)。當(dāng)然里面還有很多細(xì)節(jié)話題需要考慮,在此先一并忽略了~~答案 2:
不太清楚定向爬蟲,沒有做過;但是感覺可以把爬到的文檔在數(shù)據(jù)庫中根據(jù)URL建立索引,爬過的就不用再爬了;HTML解析上,也可以用廣度優(yōu)先(而不是深度優(yōu)先),如果目錄比較深的網(wǎng)站可以截?cái)?答案 3:
贊同劉嘉瑜的回答,或者你可以用隊(duì)列來做任務(wù)調(diào)度保證一個(gè)url只處理一次可以參照一下一些爬蟲框架的設(shè)計(jì),比如scrapy.org/答案 4:
來一個(gè)全局的消重吧,要簡單的話可以用bloomfilter,不過不支持刪除操作,會存在錯(cuò)誤率。稍微帶邏輯可以redis試試,能夠支持過期這樣的操作。答案 5:
最近看到的一個(gè)淘寶的搜索架構(gòu)的文章blog.nosqlfan/-tml...下一篇:高中畢業(yè)的這個(gè)暑假都可以做什么? 下一篇 【方向鍵 ( → )下一篇】
上一篇:在C語言中,高級指針如 double** ppd;int** ppi;有什么用處? 上一篇 【方向鍵 ( ← )上一篇】
快搜