todayx.org
          todayx.org
          posts - 39,comments - 60,trackbacks - 0

          不知不覺,2011已經(jīng)過去了,這一年中的大多時(shí)間,都花在了輿情監(jiān)控系統(tǒng)的探索和研發(fā)上。尤其是作為輿情監(jiān)控系統(tǒng)的基礎(chǔ)子系統(tǒng)——網(wǎng)絡(luò)爬蟲系統(tǒng),更是消耗了不少的時(shí)間和精力。下面簡單分享一下在網(wǎng)絡(luò)爬蟲系統(tǒng)設(shè)計(jì)開發(fā)中的一些經(jīng)驗(yàn)和不足。

           

          首次接觸爬蟲,是在前年的時(shí)候,一次偶然的機(jī)會,從圖書館帶回一本書中,夾帶了一個(gè)網(wǎng)絡(luò)爬蟲的demo源碼,當(dāng)時(shí)只覺得非常敬仰那些能夠?qū)懗雠老x程 序的人,認(rèn)為倘若有一天自己也能寫一個(gè)網(wǎng)絡(luò)爬蟲出來,該是一件多么讓人興奮的事。后來工作之后,參與的第一個(gè)項(xiàng)目,就是網(wǎng)絡(luò)輿情監(jiān)控系統(tǒng)的開發(fā),不過當(dāng)時(shí) 因?yàn)橹皇菓?yīng)屆畢業(yè)生,且公司的這套產(chǎn)品已趨向成熟,正在推廣期間,所以工作內(nèi)容主要是該系統(tǒng)下網(wǎng)絡(luò)爬蟲子系統(tǒng)的配置和維護(hù),以及爬蟲日志的分析。也正是從 這里開始,真正踏上了網(wǎng)絡(luò)爬蟲的探索之路。

           

          期間,我的畢業(yè)設(shè)計(jì)作品就是一個(gè)小型的搜索引擎系統(tǒng),做這個(gè)東西的目的也很明確,就是為了探索網(wǎng)絡(luò)爬蟲系統(tǒng)在實(shí)際應(yīng)用中的一些核心技術(shù),并積累一些 經(jīng)驗(yàn)。后來來了上海,沒想到公司又是搞搜索、搞網(wǎng)絡(luò)輿情的,所以又繼續(xù)沿著之前的路走:設(shè)計(jì)開發(fā)爬蟲,數(shù)據(jù)分析,和海量數(shù)據(jù)的全文檢索。

           

          這樣的日子,不知不覺已經(jīng)有一年了,在這一年里,采用不同的技術(shù)、不同的設(shè)計(jì)理念和不同的目的,主要做了三個(gè)版本的爬蟲系統(tǒng),最滿意的要數(shù)現(xiàn)在這個(gè) 了。個(gè)人認(rèn)為最主要的原因還是因?yàn)橛辛酥暗慕?jīng)驗(yàn)積累和沉淀,使得在爬蟲設(shè)計(jì)之初就注意到了并避開了之前爬蟲遇到的各種各樣的問題。現(xiàn)在的爬蟲系統(tǒng),主要 是作為一個(gè)定向數(shù)據(jù)采集和網(wǎng)頁文本挖掘軟件為網(wǎng)絡(luò)輿情監(jiān)控系統(tǒng)服務(wù)的,除了常規(guī)爬蟲的網(wǎng)頁采集、鏈接跟蹤等功能外,還帶有網(wǎng)頁主題識別和價(jià)值文本抽取等稍 微有點(diǎn)“特色”的功能。在筆者看來,這樣的網(wǎng)絡(luò)爬蟲稍顯“另類”,因?yàn)樗c常規(guī)的網(wǎng)絡(luò)爬蟲相比,人工依賴更多,但是數(shù)據(jù)抽取更精準(zhǔn),更高效。不同于公司版 本的網(wǎng)絡(luò)爬蟲是以命令行方式控制,筆者個(gè)人探索研究之用的UI版,整合了一個(gè)簡單的界面,以使用戶可以更方便、更直觀的控制和配置爬蟲。界面在設(shè)計(jì)之初, 參考了國內(nèi)某著名信息采集系統(tǒng)的UI,所以看起來爬蟲更像是一個(gè)網(wǎng)頁數(shù)據(jù)采集系統(tǒng)。但事實(shí)上,輿情監(jiān)控使用的爬蟲跟普通的網(wǎng)頁信息采集系統(tǒng),并沒有很大的 區(qū)別。以下是該系統(tǒng)的部分截圖:

           

           

           

           

           

           

          該系統(tǒng)目前采用的技術(shù)架構(gòu)是:Quartz + HtmlUnit + HttpClient + DBCP,采用XPath來精確抽取網(wǎng)頁文本,最低內(nèi)存消耗5M,最長運(yùn)行時(shí)間15天,最快抓取速度10208網(wǎng)頁/小時(shí),最高寬帶占用38M/s
          測試環(huán)境為:Windows Server2003 SP3 32位Hotspot 1536M內(nèi)存 100M光纖 MySql5.1

           

          其實(shí)對于網(wǎng)絡(luò)爬蟲工作模式,以及網(wǎng)絡(luò)爬蟲的模塊設(shè)計(jì),應(yīng)該說很多人即便是沒有做過爬蟲的人,也能說出來個(gè)大概。事實(shí)上,雖然網(wǎng)絡(luò)爬蟲系統(tǒng)是技術(shù)密集型的軟件系統(tǒng),但是如果一個(gè)基礎(chǔ)扎實(shí)的程序員要做一個(gè)像模像樣的“簡化版”爬蟲,也不是什么十分困難的事情。

           

          為什么這么說呢?筆者認(rèn)為,爬蟲的核心,無非就是網(wǎng)頁獲取、鏈接抽取、文本抽取,稍微高級一點(diǎn)即是權(quán)重分析、網(wǎng)頁去重、更新策略,再高級就是人工智 能和分布式集群了。拋開人工智能和分布式,要做一個(gè)單機(jī)版的爬蟲,還是很容易的:java世界中,網(wǎng)頁獲取技術(shù)可謂多如繁星,如HttpClient等, 鏈接抽取自然也不在話下,對于單機(jī)版的爬蟲,權(quán)重分析、網(wǎng)頁去重和更新策略可以暫時(shí)不去做,那么就剩下一個(gè)文本抽取了,過濾HTML標(biāo)簽就是最簡單的文本 抽取(當(dāng)然實(shí)際上很少有這么簡單處理的),而這對HtmlParser來講,簡直是小菜一碟。

           

          在筆者看來,一套完善的網(wǎng)絡(luò)爬蟲系統(tǒng),應(yīng)該具備以下特點(diǎn):
          1、良好的框架結(jié)構(gòu)
          2、合適的網(wǎng)頁獲取技術(shù)
          3、高度優(yōu)化的代碼
          4、易于配置和管理

           

          第一點(diǎn):因?yàn)榕老x系統(tǒng)一旦運(yùn)行起來,可能好幾周甚至更長時(shí)間都不會停下來,良好的框架結(jié)構(gòu)可以保證爬蟲在這個(gè)漫長的作戰(zhàn)過程中盡量少的犯錯(cuò)誤,和較低資源占用;同時(shí),良好的框架結(jié)構(gòu)也為擴(kuò)展和增強(qiáng)爬蟲的功能奠定良好的基礎(chǔ);
          第二點(diǎn):在 一年多的網(wǎng)絡(luò)爬蟲開發(fā)過程中,筆者接觸了眾多的網(wǎng)頁獲取技術(shù),如Watij、JRex、JSoup再到后來的HtppClient和目前的 HtmlUnit,總的來講,各有優(yōu)劣,所謂“優(yōu)劣”,主要的判斷標(biāo)準(zhǔn)有同一網(wǎng)頁的獲取時(shí)間、解析時(shí)間、是否支持腳本以及對內(nèi)存和CPU的占用,爬蟲要面 對不同的頁面類型,何時(shí)采用何種頁面獲取技術(shù),以使爬蟲消耗的資源和時(shí)間最少,是爬蟲設(shè)計(jì)者不得不考慮的問題;據(jù)筆者了解,HttpClient應(yīng)該是 Java開源爬蟲中用的最多的技術(shù),也確實(shí)應(yīng)該是爬蟲的首選網(wǎng)頁獲取技術(shù);
          第三點(diǎn):正如第一點(diǎn)所說,在爬蟲長時(shí)間運(yùn)行過程中,如果不對代碼做高度優(yōu)化,那么萬一出現(xiàn)內(nèi)存泄露,對爬蟲而言,將會是致命的打擊;另外,經(jīng)過高度優(yōu)化的代碼,可以使CPU占用處于低位,如此,便可保證同樣的服務(wù)器硬件上,爬蟲的效率、速度和穩(wěn)定性都會有質(zhì)的提高;
          第四點(diǎn):爬蟲系統(tǒng)不是智能的,很多情況不能夠自己判斷并作出決定,但是為了讓爬蟲變得聰明,往往需要配置大量的參數(shù)來“指導(dǎo)”和管理爬蟲工作

           

           

          正是基于上述四點(diǎn)保證,現(xiàn)有爬蟲才能在最低5M內(nèi)存時(shí)穩(wěn)定運(yùn)行,才能在兩周的連續(xù)運(yùn)行時(shí)間內(nèi)不出現(xiàn)任何內(nèi)存泄露等問題。不過這不能掩飾爬蟲的“內(nèi)傷”,而這些“內(nèi)傷”也正是2012所要解決的問題:
          1、雖然爬蟲能夠精確抽取論壇主題和回帖,以及點(diǎn)擊量和回復(fù)數(shù),但爬蟲嚴(yán)重依賴XPath,不能夠自主識別鏈接重要程度,不能夠自主識別網(wǎng)頁價(jià)值數(shù)據(jù);
          2、爬蟲采用插件模式,每個(gè)站點(diǎn)都有一個(gè)插件,以此來保證抽取數(shù)據(jù)的準(zhǔn)確性,但是缺乏大規(guī)模全網(wǎng)爬取的能力;
          3、不支持robots協(xié)議,像個(gè)“流氓”;
          4、不支持集群;
          5、采用關(guān)系型數(shù)據(jù)庫,而沒有使用NOSQL數(shù)據(jù)庫;

           

          這些內(nèi)傷有的影響了爬蟲的性能,有的限制了爬蟲的成長,有的則使爬蟲看起來像個(gè)“流氓”,所以在未來的2012上半年,需要解決這些問題。目前的打算如下:


          爬蟲改定向爬取為定向爬取與全網(wǎng)爬取共存后,爬蟲需要自動跟蹤鏈接、抽取文本,所以要用到主題識別技術(shù)、網(wǎng)頁切片技術(shù)和網(wǎng)頁權(quán)重分析技術(shù);
          系統(tǒng)應(yīng)該提供一個(gè)默認(rèn)的插件,來兼容絕大部分網(wǎng)頁,但要保留現(xiàn)有的插件模式;
          為爬蟲加入robots協(xié)議的支持,使其變成“正規(guī)軍”;
          好的爬蟲當(dāng)然是要支持集群的,目前考慮采用apache的hadoop來做分布式的爬蟲;
          URL數(shù)據(jù)存儲在關(guān)系型數(shù)據(jù)庫中對爬蟲性能的影響十分明顯,稍后要用MongoDB來取代關(guān)系型數(shù)據(jù)庫來管理URL數(shù)據(jù)

           

           

          網(wǎng)上已有很多開源爬蟲,筆者也研究過好幾款,只能說良莠不齊吧,且筆者覺得大多爬蟲采用的技術(shù)都比較老,而且普遍存在一個(gè)問題,就是對網(wǎng)頁權(quán)重分析 和URL鏈接管理做得很不到位,或者干脆就沒有做,不明白為什么。不過作為開源軟件的一名貢獻(xiàn)者,其作者的精神和勇氣還是值得欽佩的,在此向所有開源事業(yè) 的先驅(qū)們致敬!

           

           

          歷史上的今天
          回顧歷史的今天,歷史就像生活的一面鏡子;可以了解歷史的這一天發(fā)生的事件;借古可以鑒今;歷史是不能忘記的.要記住歷史的每一天
          http://www.todayx.org/

           

          原創(chuàng)文章,轉(zhuǎn)載請注明出處:http://yshjava.iteye.com/blog/1338896



          posted on 2012-01-10 22:44 todayx.org 閱讀(7241) 評論(6)  編輯  收藏

          FeedBack:
          # re: 網(wǎng)絡(luò)輿情監(jiān)控系統(tǒng)的爬蟲子系統(tǒng)開發(fā)總結(jié)
          2012-01-11 09:05 | tb
          不錯(cuò)的總結(jié)啊   回復(fù)  更多評論
            
          # re: 網(wǎng)絡(luò)輿情監(jiān)控系統(tǒng)的爬蟲子系統(tǒng)開發(fā)總結(jié)
          2012-01-11 10:50 | 南大老梁
          呵呵,同行啊,我發(fā)現(xiàn)我們用的技術(shù)基本一樣,但是我在架構(gòu)上跟你們完全不一樣,希望能交個(gè)朋友,我的郵箱:xoknight@gmail.com  回復(fù)  更多評論
            
          # re: 網(wǎng)絡(luò)輿情監(jiān)控系統(tǒng)的爬蟲子系統(tǒng)開發(fā)總結(jié)
          2012-01-11 23:43 | allenny
          技術(shù)上,你耗費(fèi)帶寬;政治上,你是輿論壓制的幫兇。勸早洗手吧~~  回復(fù)  更多評論
            
          # re: 網(wǎng)絡(luò)輿情監(jiān)控系統(tǒng)的爬蟲子系統(tǒng)開發(fā)總結(jié)
          2012-01-12 08:54 | tb
          前些年還研究nutch很不錯(cuò)的  回復(fù)  更多評論
            
          # re: 網(wǎng)絡(luò)輿情監(jiān)控系統(tǒng)的爬蟲子系統(tǒng)開發(fā)總結(jié)[未登錄]
          2014-03-21 15:52 | tony
          你是漢中的嗎?  回復(fù)  更多評論
            
          # re: 網(wǎng)絡(luò)輿情監(jiān)控系統(tǒng)的爬蟲子系統(tǒng)開發(fā)總結(jié)
          2015-06-17 14:09 | th_pal
          樓主有解決方案文檔么  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 永顺县| 菏泽市| 玉屏| 安远县| 洮南市| 洪雅县| 手游| 宁强县| 永和县| 西平县| 镇远县| 乌海市| 富阳市| 温州市| 都昌县| 卢湾区| 永康市| 曲阜市| 永安市| 汤原县| 沿河| 信宜市| 永州市| 辉南县| 无极县| 眉山市| 海宁市| 浪卡子县| 尖扎县| 青岛市| 土默特右旗| 龙井市| 蒲江县| 洛浦县| 诸城市| 泸州市| 从江县| 西乡县| 迭部县| 南汇区| 黑龙江省|