胡鵬
摘要:互聯(lián)網(wǎng)是信息的載體,隨著信息量的迅速增長,給用戶檢索獲取需要的互聯(lián)網(wǎng)學(xué)習(xí)資源增加了難度和時(shí)間。因此,學(xué)習(xí)資源爬蟲是亟待研究與解決的問題。實(shí)現(xiàn)學(xué)習(xí)資源爬蟲系統(tǒng)的關(guān)鍵為:首先界定互聯(lián)網(wǎng)學(xué)習(xí)資源的概念、類型、格式形態(tài),然后設(shè)計(jì)學(xué)習(xí)資源爬蟲結(jié)構(gòu)以及抓取、解析、去重、下載功能,最后根據(jù)系統(tǒng)開發(fā)環(huán)境實(shí)現(xiàn)爬蟲結(jié)果。借助webdriver、Firfox瀏覽器并結(jié)合反網(wǎng)絡(luò)爬蟲策略,解決動(dòng)態(tài)網(wǎng)站腳本與服務(wù)器異步交互時(shí)的數(shù)據(jù)丟失問題,進(jìn)行完整、自動(dòng)、高效的批量內(nèi)容下載,優(yōu)化學(xué)習(xí)資源獲取的準(zhǔn)確率與效率,以獲取更有價(jià)值的學(xué)習(xí)資源。
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲;Web網(wǎng)頁;學(xué)習(xí)資源
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):16727800(2017)004011103
0引言
隨著信息技術(shù)的發(fā)展,互聯(lián)網(wǎng)信息量呈指數(shù)級(jí)爆炸性增長[1],信息淹沒在浩瀚如海的互聯(lián)網(wǎng)數(shù)據(jù)中。用戶要從海量、異構(gòu)、半異構(gòu)、動(dòng)態(tài)數(shù)據(jù)中快速獲取有價(jià)值的學(xué)習(xí)資源是非常困難的。網(wǎng)絡(luò)中學(xué)習(xí)資源數(shù)據(jù)量龐大,百度、Google檢索也僅收錄了頁面的1/3,基于漢語自身的復(fù)雜性及特點(diǎn),檢索獲取有價(jià)值的學(xué)習(xí)資源效率低、花費(fèi)時(shí)間長[2]。為此,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)學(xué)習(xí)資源爬蟲系統(tǒng),使學(xué)習(xí)資源檢索能快速、準(zhǔn)確地達(dá)到預(yù)期目標(biāo)。首先對(duì)學(xué)習(xí)資源的概念、類型、格式作一定闡述與界定。學(xué)習(xí)資源是指學(xué)習(xí)、教育被應(yīng)用、參考,并以數(shù)字化信息加載的一切對(duì)象;學(xué)習(xí)資源類型是指試題、試卷、案例、問題解答、媒體素材、網(wǎng)絡(luò)課程、網(wǎng)絡(luò)課件;學(xué)習(xí)資源格式是指HTML、TXT、Word、PPT、PDF、Excel格式的文本或文檔。
1系統(tǒng)總體設(shè)計(jì)
聚焦網(wǎng)絡(luò)爬蟲(Web Crawler)也稱為主題網(wǎng)絡(luò)蜘蛛,是一個(gè)自動(dòng)下載網(wǎng)頁的計(jì)算機(jī)程序。設(shè)置初始的URL(Uniform Resource Location)隊(duì)列序列化開始爬取,解析原URL指向的網(wǎng)頁并提取新的URL鏈接與頁面信息,提取過程中對(duì)網(wǎng)頁信息、文檔文本進(jìn)行過濾,剔除重復(fù)、不符合要求的URL及文本文檔,下載有關(guān)主題信息儲(chǔ)入數(shù)據(jù)庫,并且不斷遍歷整個(gè)過程,直至程序報(bào)錯(cuò)或達(dá)到系統(tǒng)的預(yù)定規(guī)則而停止[3]。本系統(tǒng)設(shè)計(jì)學(xué)習(xí)資源爬蟲結(jié)構(gòu)如圖1所示,根據(jù)系統(tǒng)的爬蟲結(jié)構(gòu),其功能模塊主要包括:網(wǎng)頁抓取、網(wǎng)頁解析、內(nèi)容去重、內(nèi)容下載。系統(tǒng)的功能模塊其學(xué)習(xí)資源爬蟲流程如圖2所示。
2系統(tǒng)功能模塊
2.1網(wǎng)頁抓取
網(wǎng)頁抓取策略包括深度優(yōu)先搜索策略、最佳優(yōu)先搜索策略、廣度優(yōu)先搜索策略。深度優(yōu)先搜索策略在深度大、數(shù)據(jù)多時(shí),抓取深度、命中率以及抓取效率會(huì)大幅下降,同時(shí)由于受系統(tǒng)堆棧容量限制,內(nèi)存也會(huì)產(chǎn)生溢出;最佳優(yōu)先策略是一種局部最優(yōu)搜索算法,需結(jié)合具體應(yīng)用進(jìn)行改進(jìn);廣度優(yōu)先搜索策略必須考慮溢出和節(jié)省內(nèi)存空間的問題,運(yùn)行速度要比深度優(yōu)先搜索快很多。本文采用廣度優(yōu)先爬蟲策略結(jié)合反網(wǎng)絡(luò)爬蟲策略,網(wǎng)頁抓取時(shí)應(yīng)配置爬蟲網(wǎng)頁的腳本,配置網(wǎng)頁腳本為XML、Groovy文件,XML用于限定爬蟲的對(duì)象范圍,過濾與學(xué)習(xí)資源無關(guān)的信息;Groovy用于限定爬蟲對(duì)象內(nèi)容的范圍,為網(wǎng)頁內(nèi)容過濾掉“廣告條”以及網(wǎng)頁下方的網(wǎng)站說明等信息。系統(tǒng)啟動(dòng)時(shí)將初始的URL種子集隊(duì)列放入Redis SitesQueue臨時(shí)數(shù)據(jù)庫,并不斷地從Redis隊(duì)列中抽取URL,解析其DNS,訪問網(wǎng)頁協(xié)議HTTP、主機(jī)名、路徑,建立網(wǎng)絡(luò)通信發(fā)送請(qǐng)求報(bào)文,連接Web服務(wù)器下載頁面并把頁面內(nèi)容及鏈接信息保存到本地磁盤上[4],以節(jié)約主機(jī)內(nèi)存的占用,提高網(wǎng)頁抓取效率。
2.2網(wǎng)頁解析
網(wǎng)頁解析是網(wǎng)頁處理的起點(diǎn),程序發(fā)送請(qǐng)求信息,協(xié)議允許訪問頁面則進(jìn)入頁面框架。通過解析類ParserFile.class對(duì)HTML網(wǎng)頁進(jìn)行DOM解析,其中包括HTML標(biāo)簽、元素內(nèi)容、腳本內(nèi)容、注釋等,用index處理HTML中的標(biāo)簽、文本、注釋、指令,以及這些符號(hào)之間的語法關(guān)系,如標(biāo)簽與標(biāo)簽、標(biāo)簽與文本的關(guān)系。主要解析標(biāo)簽包括:正文標(biāo)題(Title)、正文內(nèi)容(Article)、鏈接(Link)、作者(Author)、發(fā)布時(shí)間(Publishtime)、來源(Source)。用inline處理錨文本對(duì)應(yīng)URL鏈接節(jié)點(diǎn)下的“href”屬性,獲取錨文本與URL之間的對(duì)應(yīng)關(guān)系。在DOM解析與URL語法解析的基礎(chǔ)上,即可進(jìn)行網(wǎng)頁內(nèi)容的識(shí)別操作[5],提取內(nèi)容進(jìn)行去重處理,提取鏈接URL進(jìn)行判斷處理。解析主要代碼如下://判斷fileDir文件的第index個(gè)dom中,有無
2.3內(nèi)容去重
目前Internet的重復(fù)網(wǎng)頁約占35%~45%,大部分是內(nèi)答轉(zhuǎn)載。爬取這些網(wǎng)頁或者重復(fù)內(nèi)容既占用網(wǎng)絡(luò)帶寬又浪費(fèi)資源,用戶不希望收集一堆內(nèi)容相同或近似的檢索結(jié)果。因此,程序啟動(dòng)之前已配置網(wǎng)頁腳本為XML、Groovy文件,在URL中限定了爬蟲對(duì)象、內(nèi)容的范圍,剔除了與學(xué)習(xí)資源無關(guān)的信息內(nèi)容。程序運(yùn)行時(shí),處理爬蟲過程中存在的重復(fù)網(wǎng)址,剔除重復(fù)學(xué)習(xí)資源內(nèi)容或文本文檔?;ヂ?lián)網(wǎng)學(xué)習(xí)資源范圍和數(shù)量龐大,選擇好的去重策略,能節(jié)約大量爬蟲時(shí)間,提高爬蟲效率[67]。程序?qū)edis緩存內(nèi)容去重效率相當(dāng)高,對(duì)內(nèi)存要求也相對(duì)較高。同時(shí)Redis要關(guān)閉VM功能,需要設(shè)置好redis.conf配置文件,因?yàn)閮?nèi)存使用過高將導(dǎo)致內(nèi)存溢出。內(nèi)容去重主要包括正文標(biāo)題(Title)、正文內(nèi)容(Article)的去重,是一種高效去重的方法。
2.4內(nèi)容下載
網(wǎng)頁分為靜態(tài)和動(dòng)態(tài)。靜態(tài)網(wǎng)頁由HTML代碼生成,頁面的內(nèi)容、結(jié)果基本不會(huì)有變化;動(dòng)態(tài)網(wǎng)頁是相對(duì)靜態(tài)的一種網(wǎng)頁編程技術(shù),具有如下幾個(gè)特點(diǎn):交互性、更新性、效果動(dòng)態(tài)性。由于動(dòng)態(tài)網(wǎng)站腳本與服務(wù)器異步交互易產(chǎn)生數(shù)據(jù)丟失,需借助Firfox瀏覽器、Webdriver測試工具解決該問題,以進(jìn)行完整、高效、自動(dòng)的批量網(wǎng)頁內(nèi)容下載。系統(tǒng)運(yùn)行主程序MainQuartz和子程序ListStart、DetailStart時(shí),ListStart子程序根據(jù)節(jié)點(diǎn)下載網(wǎng)址的主列表,DetailStart子程序下載列表項(xiàng)內(nèi)容。List表下載鏈接URL、時(shí)間、標(biāo)題、來源,Article表下載正文內(nèi)容、發(fā)布時(shí)間、來源、作者、描述、關(guān)鍵字。下載模塊始終在監(jiān)聽等待爬蟲List表和Article表,如果為空,則處于等待狀態(tài);如果不為空,則下載列表內(nèi)容,查看HeidiSQL數(shù)據(jù)庫管理界面,存儲(chǔ)記錄每一條爬取成功的信息。
3系統(tǒng)開發(fā)環(huán)境
硬件配置:CPU為Intel Core i5,內(nèi)存為8G,硬盤500G。 軟件配置:操作系統(tǒng)為Windows7 64bit,軟件集成開發(fā)工具為Eclipse,開發(fā)語言為Java,數(shù)據(jù)庫為MySQL、Redis。 本系統(tǒng)需要對(duì)Redis緩存內(nèi)容去重,對(duì)內(nèi)存要求會(huì)偏高,因此采用CPU Intel Core i5,內(nèi)存8G。開發(fā)工具是以Eclipse為集成框架,開發(fā)語言采用Java,因已生成的類包庫可以直接調(diào)用,簡單方便。Redis作為緩存數(shù)據(jù)庫,可大幅提高爬蟲效率,也相對(duì)減輕了對(duì)內(nèi)存的需求,很大程度上避免了內(nèi)存溢出,MySQL為存儲(chǔ)數(shù)據(jù)庫。
4系統(tǒng)爬蟲結(jié)果與結(jié)論
根據(jù)爬蟲結(jié)構(gòu)、功能設(shè)計(jì)與系統(tǒng)開發(fā)環(huán)境的配置,爬蟲數(shù)據(jù)來源于中國教育信息網(wǎng)、百度文庫資源、小學(xué)資源網(wǎng)、小教資源網(wǎng),以及部分研究機(jī)構(gòu)與高校的共享資源等。爬取學(xué)習(xí)資源Article表數(shù)據(jù)如圖3所示。由List表和Article表的數(shù)據(jù)可知,List爬蟲存入數(shù)據(jù)庫的平均速度為1.3頁/秒,Article表爬蟲存入數(shù)據(jù)庫的平均速度為6.5頁/秒,學(xué)習(xí)資源爬蟲的平均速度為4.0頁/秒,準(zhǔn)確率在95%左右。系統(tǒng)可大幅提高抓取學(xué)習(xí)資源的準(zhǔn)確率與效率,同時(shí)提升了獲取的學(xué)習(xí)資源的價(jià)值性。
爬取的學(xué)習(xí)資源為HTML、TXT、Word、PPT、PDF、Excel的文本或文檔。其中影響爬蟲的因素有網(wǎng)速、網(wǎng)址服務(wù)器以及學(xué)習(xí)資源的文本或文檔大小等。本文設(shè)計(jì)的學(xué)習(xí)資源爬蟲系統(tǒng)采用廣度優(yōu)先爬蟲和反網(wǎng)絡(luò)爬蟲策略,通過解析類ParserFile.class對(duì)HTML網(wǎng)頁進(jìn)行DOM解析,通過程序?qū)edis緩存內(nèi)容去重,并借助webdriver、Firfox瀏覽器,進(jìn)行完整、高效、自動(dòng)的批量網(wǎng)頁內(nèi)容下載,改善了網(wǎng)絡(luò)爬蟲易被屏蔽的缺點(diǎn),降低了爬蟲難度與任務(wù)量,同時(shí)解決了動(dòng)態(tài)網(wǎng)站腳本與服務(wù)器異步交互的數(shù)據(jù)丟失問題,優(yōu)化了學(xué)習(xí)資源獲取的準(zhǔn)確率、效率,從而獲取更多、更有價(jià)值的學(xué)習(xí)資源。
參考文獻(xiàn):[1]孫立偉,何國輝,吳禮發(fā).網(wǎng)絡(luò)爬蟲技術(shù)的研究[J].電腦知識(shí)與技術(shù),2010(15):41124115.
[2]楊彥軍,郭紹青.ELearning學(xué)習(xí)資源的交互設(shè)計(jì)研究[J].現(xiàn)代遠(yuǎn)程教育研究,2012(1):6267.
[3]J CHO.Crawling the Web:discovery and maintenance of largescale Web data[J].International Journal of Advances in Engineering Sciences, 2001,3(3):6266.
[4]翁巖青. 網(wǎng)頁抓取策略研究[D].哈爾濱:哈爾濱工程大學(xué),2010.
[5]王璟琦. 基于內(nèi)容單元的網(wǎng)頁解析與內(nèi)容提取[D].哈爾濱:哈爾濱工業(yè)大學(xué),2008.
[6]黃聰會(huì),張水平,胡洋.主題Deep Web爬蟲框架研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2010(5):929931,935.
[7]孫濤,曹丙章,邱荷花.基于MapReduce的視屏爬蟲系統(tǒng)研究[J].華中科技大學(xué)學(xué)報(bào):自然科學(xué)版,2015(5):129132.
(責(zé)任編輯:黃?。?