郭丙琴陳愛武
?
分布式網(wǎng)絡爬蟲設計
郭丙琴1陳愛武2
(1.湖南科技學院 教學質(zhì)量管理處,湖南 永州 425199;2.湖南科技學院 電子與信息工程學院,湖南 永州 425199)
網(wǎng)絡爬蟲是互聯(lián)網(wǎng)信息獲取的重要工具之一,其性能的好壞直接影響到互聯(lián)網(wǎng)信息檢索的準確性,互聯(lián)網(wǎng)信息復雜多變,造成傳統(tǒng)方法的網(wǎng)絡爬蟲容易抓取到錯誤信息。論文在此基礎上提出了一種并行和分布式技術進行設計,并通過招聘網(wǎng)頁信息抓取的實驗,實驗結果證明該網(wǎng)絡爬蟲性能穩(wěn)定,可以提升抓取信息的準確性。
分布式;網(wǎng)絡爬蟲;Python;搜索引擎
搜索引擎是基于一種網(wǎng)絡爬蟲技術來抓取Web網(wǎng)頁、文檔、圖片、音頻、視頻等信息,并通過索引來組織這些信息,設計性能優(yōu)良的網(wǎng)絡爬蟲是搜索引擎重要工作之一[1]。網(wǎng)絡爬蟲始于一張被稱作種子的統(tǒng)一資源地址(URLs)列表,當網(wǎng)絡爬蟲訪問這些統(tǒng)一資源定位器時,它們會甄別出頁面上所有的超鏈接,并將它們寫入一張“待訪列表”,即所謂“爬行疆域”(Crawl Frontier),此疆域上的統(tǒng)一資源地址將被按照一套策略循環(huán)訪問。如果爬蟲在執(zhí)行的過程中復制歸檔和保存網(wǎng)站上的信息,這些檔案通常儲存,使它們可以被查看。網(wǎng)絡爬蟲只能在給定時間內(nèi)下載有限數(shù)量的網(wǎng)頁,所以設計大容量體積的網(wǎng)絡爬蟲時需要優(yōu)先考慮其下載,而互聯(lián)網(wǎng)資源瞬息萬變,網(wǎng)絡爬蟲下載的網(wǎng)頁在使用前就可能已經(jīng)被修改甚至是刪除了。另外,服務器端軟件所生成的統(tǒng)一資源地址數(shù)量龐大,所以網(wǎng)絡爬蟲難以避免的采集到重復內(nèi)容,根據(jù)超文本協(xié)議“顯示請求”(HTTP GET)的參數(shù)的無盡組合所返回的頁面中,只有很少一部分傳回唯一的內(nèi)容等等,這些問題是網(wǎng)絡爬蟲設計所面臨的基本問題[2]。
論文通過招聘網(wǎng)站的職位信息抓取的實驗進行了設計和研究,并且對抓取的數(shù)據(jù)進行數(shù)據(jù)分析,解決數(shù)據(jù)的去重問題、分布式問題和web開發(fā)的整合問題等。
2.1 性能分析
由于網(wǎng)絡爬蟲是對互聯(lián)網(wǎng)上數(shù)據(jù)進行處理,信息量非常大,因此對性能的要求是非常高的,所以在設計時一定要考慮其性能優(yōu)化問題,文獻顯示[3,4],在設計網(wǎng)絡爬蟲是需要考慮的主要性能包括數(shù)據(jù)庫查詢、程序執(zhí)行的效率、網(wǎng)絡IO流高低等,另外對挖取到的網(wǎng)頁進行解析時,務必要保證解析結果的準確性,這樣才能保證爬蟲運行的穩(wěn)定性,一旦解析出錯,會導致大量的垃圾數(shù)據(jù)產(chǎn)生,極大的影響爬蟲的運行效率。在爬蟲運行過程中,一定要做到可監(jiān)控,即使有意外的情況發(fā)生,也能及時的定位到錯誤。而且還可以通過監(jiān)控頁面的數(shù)據(jù)及時了解爬蟲的工作性能并保證爬蟲在每個時刻都達到最優(yōu)的狀態(tài)[5]。
2.2模塊構成
論文設計的網(wǎng)絡爬蟲(crawler)主要包含以下幾個基本模塊:扒取任務分配模塊、任務執(zhí)行模塊(客戶端)、頁面解析模塊、數(shù)據(jù)處理模塊、運行監(jiān)控模塊,具體結構體系如圖1所示。
根據(jù)圖1所示的模塊構成,網(wǎng)絡爬蟲運行流程是,首先手動創(chuàng)建多個搜索條件,每一個Session對應一個搜索條件,當網(wǎng)絡爬蟲客戶端啟動時會自動請求爬蟲服務器(SERVER),服務器首先根據(jù)客戶端的IP驗證客戶端申請的有效性;如果判斷是非正常的客戶端請求,服務端不返回任何數(shù)據(jù)。如果判斷客戶端請求正常,服務端會將客戶端發(fā)過來的html頁面進行GZIP解壓(為減少網(wǎng)絡流量,客戶端從網(wǎng)站上下載的html頁面會進行GZIP壓縮后再發(fā)送給服務器),然后傳給相應的callback函數(shù)進行處理。當callback處理完成,服務端根據(jù)客戶端的申請生成一個當前Session的Queue,并將生成的Queue的信息返回客戶端。論文設計的基于招聘網(wǎng)頁信息網(wǎng)絡爬蟲Callback的工作模式分兩種類型,列表頁面和詳情頁面,列表頁面在解析的時候會將所有詳情頁的url和職位(公司)的基本信息解析出來,然后對解析出來的url進行去重、有效性檢查等處理,最后根據(jù)處理后的url生成詳情頁的Queue。詳情頁面在解析時主要是將職位(公司)的詳細信息提取出來,主要包括職位名稱、薪資、招聘信息發(fā)布時間、職位描述等信息。
論文的網(wǎng)絡爬蟲是針對招聘網(wǎng)站公司名稱及職位信息而設計的,考慮到后期代碼的擴展和維護,所以程序的整體框架采用面向對象的思維,在程序設計過程中,網(wǎng)絡爬蟲實現(xiàn)了一個爬蟲的基類(BaseCrawler),這樣在以后維護時如需要加入新的招聘網(wǎng)站的時候,只需要實現(xiàn)一個繼承于BaseCrawler的招聘網(wǎng)站專用的子類和對應的解析器。在設計Resource的時候,由于監(jiān)控資源類和爬蟲資源類功能上的差異性,所以將其分開設計,使用的框架要求每一個Resource綁定一個相關的Model,而監(jiān)控資源類和爬蟲資源類兩者綁定的Model存在一點沖突,所以最后在綁定Model的時候存在一些的不合理性,設計Session和Queue時,考慮到每一個搜索條件會產(chǎn)生不同的搜索結果,所以利用Session將各個搜索條件分開,讓Queue來表示每一次的請求動作,這樣設計方法便于在網(wǎng)絡爬蟲運行時及時發(fā)現(xiàn)bug保證程序結構的清晰度。
3.1爬行策略實現(xiàn)
網(wǎng)絡爬蟲程序的初衷是盡可能遍歷每一搜索條件所有的頁面,所以論文采用廣度優(yōu)先算法的理論,廣度優(yōu)先算法理論上能夠覆蓋更多的節(jié)點,在扒取招聘網(wǎng)站信息的時候,先根據(jù)特定搜索條件將所有職位列表下載下來,然后再依次下載相關的職位詳情。
圖1.Crawler模塊組成
圖2.URL節(jié)點分布圖
如圖2所示,假如A代表初始URL,BCDEF為根據(jù)A節(jié)點獲取的5個URL,G和HI為根據(jù)F、E獲取的3個URL,以此類推。那么這些URL獲取的順序就是ABCDEFHIG這樣一個順序,當通過E節(jié)點獲取到H節(jié)點的URL之后,并不會馬上進行下載,而是先解析同E在同一層中的F節(jié)點對應的URL,當這一層URL全部下載完后,再開始下一層URL下載。
3.2 Server端并行方案實現(xiàn)
我們采用gunicorn結合gevent的方式實現(xiàn)并行訪問機制,雖然多線程的方案能夠減少進程創(chuàng)建時候帶來的開銷,但是對于臨界資源的訪問控制等變得更加的復雜,需要考慮的因素更多,這樣導致開發(fā)的難度大大提升。gunicorn和gevent支持pip直接下載安裝,只需兩句簡單的shell命令即可安裝完成,為了結合gevent使用,我們只需要在爬蟲的啟動程序中加入代碼即可實現(xiàn)。
網(wǎng)絡爬蟲對招聘網(wǎng)站信息監(jiān)控頁面曲線如圖3所示。
圖3.監(jiān)控頁面曲線圖
3.3爬行策略優(yōu)化
爬蟲一般正常運行了一段時間后,扒取速度就會變得越來越慢,經(jīng)大量實驗證明這種速度變慢是由于服務器的接口的性能所產(chǎn)生的問題,網(wǎng)絡爬蟲在建表的時候,生成聯(lián)合索引,所以導致查詢速度非常慢,另外,在搜索強制加載的Queue的時候,可能就要進行文件排序,這種文件排序會導致搜索速度降低,我們在進行策略優(yōu)化時只需將代碼中的搜索條件改為唯一。
論文基于分布式方法進行網(wǎng)絡爬蟲的設計,并具體針對招聘網(wǎng)站的信息進行實驗,實驗結果顯示論文設計的網(wǎng)絡爬蟲性能穩(wěn)定,符合互聯(lián)網(wǎng)和大數(shù)據(jù)搜索引擎的基本要求。但存在多個客戶端同時工作的時候,可能會導致Mysql的死鎖(deadlock),雖然不會影響爬蟲的正常運行,但是對爬蟲的運行效率會造成一定程度的影響。
[1]李勇,韓亮.主題搜索引擎中網(wǎng)絡爬蟲的搜索策略研究[J].計算機工程與科學,2008,(3): 4-6.
[2]劉金紅,陸余良.主題網(wǎng)絡爬蟲研究綜述[J].計算機應用研究,2007,(10):26-29.
[3]孫立偉,何國輝,等.網(wǎng)絡爬蟲技術的研究[J].電腦知識與技術,2010,(15):4112-4115.
[4]唐波.網(wǎng)絡爬蟲的設計與實現(xiàn)[J].電腦知識與技術,2009,(11):2867-2868.
[5]詹恒飛,楊岳湘,等.Nutch分布式網(wǎng)絡爬蟲研究與優(yōu)化[J].計算機科學與探索, 2011,(1):68-74.
(責任編校:宮彥軍)
2016-08-26
2015年永州市科技計劃項目(永科發(fā)[2015]9號No.22)。
郭丙琴(1981-),女,廣西鹿寨人,研究方向為信息技術處理。
TP393
A
1673-2219(2017)06-0021-02