時間:2023-12-02 09:28:36
序論:好文章的創(chuàng)作是一個不斷探索和完善的過程,我們?yōu)槟扑]十篇計算機(jī)爬蟲技術(shù)范例,希望它們能助您一臂之力,提升您的閱讀品質(zhì),帶來更深刻的閱讀感受。
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)07-0061-03
信息和知識爆炸增長的時代,搜索引擎成為人們獲取信息的重要工具。搜索引擎釋放出來的網(wǎng)絡(luò)爬蟲會大量占用互聯(lián)網(wǎng)帶寬,很可能在短時間內(nèi)導(dǎo)致網(wǎng)站訪問速度緩慢,甚至無法訪問。應(yīng)對此種情況,許多網(wǎng)站采取了一些措施來攔截網(wǎng)絡(luò)爬蟲的爬取。本文在分析網(wǎng)絡(luò)爬蟲原理的基礎(chǔ)上,針對“反爬”網(wǎng)站提出了一些有效的爬取策略。
1網(wǎng)絡(luò)爬蟲概述
網(wǎng)絡(luò)爬蟲是抓取網(wǎng)頁信息的一種程序,它可用來檢查一系列站點的有效性,當(dāng)按照需求抓取并保存數(shù)據(jù)時,是搜索引擎的重要組成部分。它還可以定向采集某些網(wǎng)站下的特定信息,比如招聘、二手買賣等信息。
網(wǎng)絡(luò)上的網(wǎng)頁許多都由超鏈接連接,故形成了一張網(wǎng),網(wǎng)絡(luò)爬蟲因此也叫做網(wǎng)絡(luò)蜘蛛,順著網(wǎng)爬,每到一個網(wǎng)頁就抓取信息并抽取新的超鏈接,用于進(jìn)一步爬行的線索。網(wǎng)絡(luò)爬蟲爬行的起點叫做種子,可以自己設(shè)定也可以從某些系列網(wǎng)站獲取。
1.1網(wǎng)絡(luò)爬蟲的組成
網(wǎng)絡(luò)爬蟲主要由控制器、解析器和資源庫三部分組成。控制器是網(wǎng)絡(luò)爬蟲的控制中心,它負(fù)責(zé)分配線程并調(diào)用爬蟲為其分配爬取任務(wù);解析器是網(wǎng)絡(luò)爬蟲的核心,它的主要工作是下載網(wǎng)頁并對網(wǎng)頁中的信息進(jìn)行處理,例如刪除一些JS腳本、HTML標(biāo)簽和空格字符等,抽取特殊HTML標(biāo)簽的功能,分析數(shù)據(jù)功能;資源庫是用于保存下載的網(wǎng)頁資源,并提供生成索引的目標(biāo)源。一般采用中大型的數(shù)據(jù)庫存儲,如Oracle、Sql Server等。
1.2網(wǎng)絡(luò)爬蟲的工作原理
網(wǎng)絡(luò)爬蟲的基本工作流程如下:
1)選取初始種子URL集合;
2)將URL集合放入待抓取URL隊列;
3)從待抓取URL隊列中取出待抓取URL,解析DNS,得到主機(jī)IP,將URL對應(yīng)網(wǎng)頁下載并存儲至網(wǎng)頁資源庫。結(jié)束后將這些URL放入已抓取URL隊列。
4)從已抓取URL隊列中的URL分析出新的滿足需求的URL,放入待抓取URL隊列。
5)循環(huán)第3步,直至滿足停止條件。
傳統(tǒng)網(wǎng)絡(luò)爬蟲框架如圖1所示。
1.3網(wǎng)絡(luò)爬蟲的搜索策略
網(wǎng)絡(luò)爬蟲在運行過程中,待抓取URL隊列是很重要的一部分。待抓取URL隊列中的URL如何排序也是一個值得研究的問題,因為這涉及先抓取那個頁面,后抓取哪個頁面。而排列URL順序的方法,叫做抓取策略。常見的網(wǎng)絡(luò)爬蟲策略有:
1)廣度優(yōu)先搜索策略。在抓取過程中,由根節(jié)點開始,完成當(dāng)前層次的搜索后才跳到下一層次的搜索。該策略實現(xiàn)較為簡單,其基本思想是認(rèn)為與初始URL在一定鏈接距離內(nèi)的網(wǎng)頁具有主題相關(guān)性的概率很大。
2)深度優(yōu)先搜索策略。這種策略的主要思想是網(wǎng)絡(luò)爬蟲從起始頁開始,一個鏈接一個鏈接跟蹤下去,處理完這條線路之后再轉(zhuǎn)入下一個起始頁,繼續(xù)跟蹤鏈接。
3)最佳優(yōu)先搜索策略。該策略通過計算 URL 描述文本與目標(biāo)網(wǎng)頁的相似度,或者與主題的相關(guān)性,根據(jù)所設(shè)定的閾值選出有效 URL 進(jìn)行抓取。
4)反向鏈接數(shù)策略,反向鏈接數(shù)是指一個網(wǎng)頁被其他網(wǎng)頁鏈接指向的數(shù)量。反向鏈接數(shù)表示的是一個網(wǎng)頁的內(nèi)容受到其他人的推薦的程度。因此,很多時候搜索引擎的抓取系統(tǒng)會使用這個指標(biāo)來評價網(wǎng)頁的重要程度,從而決定不同網(wǎng)頁的抓取先后順序。
2如何應(yīng)對站點反爬蟲機(jī)制
網(wǎng)絡(luò)爬蟲會對目標(biāo)站點發(fā)送大量請求,而這樣的爬蟲機(jī)制會消耗不少網(wǎng)站資源,這對于中小型網(wǎng)站的負(fù)載是 巨大的,甚至因此而崩潰,故不少網(wǎng)站都采取了反爬蟲的機(jī)制。例如:通過識別爬蟲的User-Agent信息來拒絕爬蟲,通過Filter過濾網(wǎng)絡(luò)爬蟲,通過網(wǎng)站流量統(tǒng)計系統(tǒng)和日志分析來識別爬蟲,利用網(wǎng)站的實時反爬蟲防火墻實現(xiàn)策略。為了不被站點判斷為爬蟲而被拒絕訪問請求,此處提供兩種方法來維持爬蟲的正常運轉(zhuǎn)。
2.1降低訪問請求頻率
降低訪問請求頻率,在一定程度上是,模仿真人瀏覽頁面的動作,故而不會輕易被網(wǎng)站所封殺,拒絕訪問。實現(xiàn)的方法為在訪問URL的程序中,將訪問請求的線程休眠一段時間。
具體代碼如下:
try { Thread.currentThread().sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Sleep的休眠時間按照需求而定,以毫秒(ms)為單位。這種策略的優(yōu)點是減少了目標(biāo)站點單位時間內(nèi)的負(fù)載,而缺點則為爬蟲爬取效率的降低。
2.2設(shè)置服務(wù)器
設(shè)置服務(wù)器,較之前一種方法來說則以爬蟲的效率為首要要求,實質(zhì)就是某些網(wǎng)站的反爬蟲機(jī)制會封殺爬蟲請求頻率過高的主機(jī)的IP,為了解決這一問題,使用服務(wù)器,更換IP以及端口,解除站點對訪問頻率高的主機(jī)訪問的限制。
有兩種調(diào)用的方法,具體代碼如下:
方法一:
Jsoup.connect("http:///cityjson").proxy(Proxy.Type.HTTP, "61.158.237.35", 3128).get();
方法二:
System.setProperty("proxySet", "true"); System.setProperty("http.proxyHost", "61.158.237.35"); System.setProperty("http.proxyPort", "3128");
Document a = Jsoup.connect("http:///cityjson").get();
System.out.println(a);
其中的IP與端口為 61.158.237.35:3128。
前后的效果如圖2,3所示。
優(yōu)點:保證爬蟲執(zhí)行不被站點封殺。只要有足夠IP可滿足爬取條件。
缺點:單位時間內(nèi)消耗資源過多,給站點帶來較大的負(fù)載。延遲加大,失敗率提高。
2.3偽裝用戶
用戶User-agent是HTTP協(xié)議中的一個字段,作用是描述發(fā)出HTTP請求終端的一些信息。通俗來說,就是判斷訪問網(wǎng)站對象的類別,每個瀏覽器和正規(guī)的爬蟲都有固定的user-agent,因此只要將這個字段改成知名的user-agent就可以成功偽裝了。對于偽裝瀏覽器user-agent或知名爬蟲user-agent,更推薦偽裝瀏覽器,因為瀏覽器使用者可以是任何人,沒有固定的IP,而知名爬蟲user-agent一般都有固定IP。下面給出若干個瀏覽器的user-agent,每次發(fā)送請求時可隨機(jī)選取一個。
Mozilla/4.0( compatible ;MSIE 8.0;Windows NT 6.0)
Mozilla/4.0( compatible ;MSIE 7.0;Windows NT 5.2)
Mozilla/4.0( compatible ;MSIE 6.0;Windows NT 5.1)
設(shè)置代碼如下:
HttpGet getMethod = new HttpGet(“URl”);
getMethod.setHeader(“User-Agent”,”user agent內(nèi)容”);
2.4 自動登錄
有些網(wǎng)站一檢測到某IP的訪問量異常,就會馬上提出要登錄的要求。針對這種“反爬”策略,在登錄前需要做一些準(zhǔn)備,查清楚POST登錄請求時要附帶的參數(shù),建議先用badboy錄制登錄過程,然后將這一過程導(dǎo)出為jmeter文件,最后用jmeter查看登錄所需的參數(shù)。
3結(jié)束語
總之,為了防止爬蟲被封,原則就是偽裝成正常的用戶,只要按照這個原則總有方法可循。不過若是能熟知一些反爬蟲的原理,然后有針對地進(jìn)行拆招應(yīng)該還是十分有效的。
傳統(tǒng)網(wǎng)絡(luò)爬蟲應(yīng)用于抓取靜態(tài)Web網(wǎng)頁的信息,而AJAX/Web2.0的流行使得如何抓取動態(tài)頁面信息成為目前網(wǎng)絡(luò)爬蟲的瓶頸。另外,網(wǎng)絡(luò)爬蟲的效率與網(wǎng)站穩(wěn)定安全還未能完全達(dá)到兩者兼得的狀態(tài)。對于搜索引擎,它抓取的消耗較大,因此爬蟲的效率、特性和抓取的質(zhì)量就顯得更為重要。在未來的大數(shù)據(jù)時代,網(wǎng)絡(luò)爬蟲技術(shù)地位更為重要,和人工智能技術(shù)相結(jié)合將是熱門的課題。
參考文獻(xiàn):
[1] 郭小丹.幾種開源網(wǎng)絡(luò)爬蟲功能比較[J].黑龍江科技信息,2015(25).
[2] 林雄強(qiáng).網(wǎng)絡(luò)爬蟲[J].中國科技博覽,2014(24).
[3] 趙全軍,成功,李小正,等.一種改進(jìn)的網(wǎng)絡(luò)爬蟲搜索策略[J].中國科技信息,2014(14).
[4] 劉慶杰,孫旭光,王小英.通過Filter抵御網(wǎng)頁爬蟲[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2010(1).
[3] Wikipedia. Regular expression [EB/OL]. [2013?04?23]. http:///wiki/Regular_expression.
[4] World Wide Web Consortium. Document object model [EB/OL]. [2013?04?23]. http:///DOM.
[5] ALVAREZ M, RAPOSO J, PAN A, et al. DeepBot: a focused crawler for accessing hidden web content [C]// Proceedings of DEECS 2007. New York, USA: ACM, 2007: 18?25.
[6] 彭軻,廖聞劍.基于瀏覽器服務(wù)的網(wǎng)絡(luò)爬蟲[J].硅谷,2009(4): 49?50.
[7] 劉兵.基于JavaScript等多鏈接分析的主題爬蟲設(shè)計實現(xiàn)[J].許昌學(xué)院學(xué)報,2010,29(2):87?90.
[8] 范軒苗,鄭寧,范淵.一種基于AJAX的爬蟲模型的設(shè)計與實現(xiàn) [J].計算機(jī)應(yīng)用與軟件,2010,27(1):96?99.
[9] WebKit Open Source Project. The WebKit open source project [EB/OL]. [2013?03?24]. http://.
中圖分類號:TP391.3
經(jīng)過最近這些年的發(fā)展,搜索引擎已經(jīng)改變了信息的獲取甚至存儲方式。用戶不再需要將大量信息存儲在終端機(jī)上,而是在需要信息的時候直接運用搜索引擎來獲取,這樣不僅節(jié)約了存儲空間,也能獲取到最新、最準(zhǔn)確的數(shù)據(jù),從某種意義上來說,由于有了搜索引擎,我們便可以把一些記憶任務(wù)交給機(jī)器來完成。搜索引擎有運行在大規(guī)模云計算的通用搜索引擎,也有一些行業(yè)搜索以及網(wǎng)站搜索。通用搜索引擎是大顎,每一只都有自己獨立的領(lǐng)地。行業(yè)搜索是領(lǐng)頭雁,是各行業(yè)的旗幟。而網(wǎng)站搜索則像一只只小麻雀,雖小卻五臟俱全。無論是哪一種搜索引擎都包含采集數(shù)據(jù)的爬蟲和索引庫的管理以及搜索頁面展現(xiàn)等部分,而網(wǎng)絡(luò)爬蟲則是開發(fā)一個搜索引擎最常用的技術(shù)。
網(wǎng)絡(luò)爬蟲(Crawler)的主要作用是獲取互聯(lián)網(wǎng)上的信息。例如,一個醫(yī)藥采購人員需要找到藥品行業(yè)的有競爭力的廠家和價格等信息;金融公司員工需要找到有潛力的投資公司;媒體行業(yè)人士需要找到能夠迅速變熱的話題;這些都可以使用網(wǎng)絡(luò)爬蟲來抓取實現(xiàn);網(wǎng)絡(luò)爬蟲從互聯(lián)網(wǎng)上源源不斷的抓取海量信息,搜索引擎結(jié)果中的信息都是來源于此。所以,如果我們把互聯(lián)網(wǎng)比喻成一張覆蓋全球的蜘蛛網(wǎng),那么抓取程序就是在網(wǎng)上爬來爬去的蜘蛛。
網(wǎng)絡(luò)爬蟲需要實現(xiàn)的基本功能包括下載網(wǎng)頁以及對URL地址的遍歷。為了高效的快速遍歷網(wǎng)站還需要應(yīng)用專門的數(shù)據(jù)結(jié)構(gòu)來優(yōu)化。網(wǎng)絡(luò)爬蟲很消耗寬帶資源,設(shè)計時需要仔細(xì)的考慮如何節(jié)省網(wǎng)絡(luò)寬帶資源。下面就基于C#語言的網(wǎng)絡(luò)爬蟲而言,進(jìn)行優(yōu)化設(shè)計。
1 網(wǎng)絡(luò)爬蟲的原理
我們在瀏覽網(wǎng)頁的時候,每一個網(wǎng)頁都可以鏈接到其他網(wǎng)站,那么搜索信息也可以從一個網(wǎng)站開始,跟蹤所有網(wǎng)頁上的鏈接,然后就可能遍歷整個互聯(lián)網(wǎng)。
為了更快的抓取到想到的信息,網(wǎng)頁抓取首先從一個已知的URL地址列表開始遍歷,在搜索引擎中,爬蟲程序從一系列子鏈接中把這些初始網(wǎng)頁中的URL提取出來,放入URL工作隊列(Todo隊列),然后開始遍歷所有工作隊列中的URL,下載網(wǎng)頁并把其中新發(fā)現(xiàn)的URL再次放入工作隊列,為了判斷一個URL是否已經(jīng)遍歷過,需要把所有遍歷過的URL放入歷史表(Visited表)。遍歷的流程如下圖:
在抓取的過程中,將要訪問的鏈接和已經(jīng)訪問過的鏈接分別存儲在list中,爬蟲從種子站點開始判斷,如果有需要遍歷的鏈接,則逐個遍歷,在訪問了某個鏈接后,便將該鏈接從Todo列表中刪除,同時增加到Visited列隊的尾部,最后再通過正則表達(dá)式提取鏈接。
服務(wù)器的名稱通過DNS服務(wù)器轉(zhuǎn)換成對應(yīng)的IP地址,即通過DNS取得該URL域名的IP地址,需要選擇一個好的DNS服務(wù)器,在Windows下DNS解析的問題可以用nslookup命令來解析,如:
C:\Users\Administrator>
服務(wù)器:
Address:202.108.53.181
應(yīng)答:
名稱:
Address:211.189.214.127
2 網(wǎng)絡(luò)爬蟲的架構(gòu)
一般網(wǎng)絡(luò)爬蟲軟件都由以下幾個模塊組成:
2.1 保存種子和爬取出來的URL的數(shù)據(jù)結(jié)構(gòu)
農(nóng)民會把有生長潛力的農(nóng)作物籽用作下一季的種子,而技術(shù)人員則把一些活躍的網(wǎng)頁用作種子URL,例如網(wǎng)站的首頁或者列表頁,因為在這些頁面經(jīng)常會發(fā)現(xiàn)新的鏈接。通常爬蟲都是從一系列的種子URL開始爬取,一般從數(shù)據(jù)庫表或者配置文件中讀取這些種子URL。而保存待抓取的URL的數(shù)據(jù)結(jié)構(gòu)卻會因為系統(tǒng)的規(guī)模、功能不同有可能采取不同的策略。一個比較小的示例爬蟲程序,可能就使用內(nèi)存中的一個隊列,或者是優(yōu)先級隊列進(jìn)行存儲。一個中等規(guī)模的爬蟲程序,可能使用內(nèi)存數(shù)據(jù)庫來存儲,如果內(nèi)存不足還可以序列化到磁盤上。但是真正大規(guī)模的爬蟲系統(tǒng),是通過服務(wù)器集群來存儲已經(jīng)爬取出來的URL,并且還會在存儲URL的表中附帶一些其他信息,比如說pagerank值,供以后的計算使用。
2.2 保存已經(jīng)抓取過的URL的數(shù)據(jù)結(jié)構(gòu)
已經(jīng)抓取過的URL的規(guī)模和待抓取的URL的規(guī)模是一個相當(dāng)?shù)牧考?。正如我們前面介紹的TODO和Visited,但是,它們唯一的不同是Visited表會經(jīng)常被查詢,以便確定發(fā)現(xiàn)的URL是否已經(jīng)處理過。因此,如果Visited表數(shù)據(jù)結(jié)構(gòu)是一個內(nèi)存數(shù)據(jù)結(jié)構(gòu)的話,可以采用散列表來存儲,如果保存在數(shù)據(jù)庫中的話,可以對URL列建立索引。
2.3 頁面獲取模塊
當(dāng)從種子URL隊列或者抓取出來的URL隊列中獲得URL后,便要根據(jù)這個URL來獲得當(dāng)前頁面的內(nèi)容,獲得的方法非常簡單,就是普通的I/O操作。在這個模塊中,僅僅是把URL所指的內(nèi)容按照二進(jìn)制的格式讀出來,而不對內(nèi)容做任何處理。
2.4 提取已經(jīng)獲取的網(wǎng)頁的內(nèi)容中的有效信息
從頁面獲取模塊的結(jié)果是一個表示HTML源代碼的字符串。從這個字符串中抽取各種相關(guān)的內(nèi)容,是爬蟲軟件的目的。因此這個模塊就顯得非常重要。
通常在一個網(wǎng)頁中,除了包含有文本內(nèi)容還有圖片,超鏈接等等。對于文本內(nèi)容,首先把HTML源代碼的字符串保存成HTML文件。關(guān)于超鏈接提取,可以根據(jù)HTML語法,使用正則表達(dá)式來提取,并且把提取的超鏈接假如到TODO表中,也可以使用專門的HTML文檔解析工具。在網(wǎng)頁中,超鏈接不光指向HTML頁面,還會指向各種文件,對于除了HTML頁面的超鏈接之外,其他內(nèi)容的鏈接不能放入TODO表中,而要直接下載。因此,在這個模塊中,還必須包含提取圖片,JavaScript,PDF,DOC等內(nèi)容的部分。在提取過程中,還要針對HTTP協(xié)議,來處理返回的狀態(tài)碼。
2.5 負(fù)責(zé)連接前處理模塊,負(fù)責(zé)連接后處理模塊和過濾器模塊
如果只抓取某個網(wǎng)站的網(wǎng)頁,則可以對URL按域名過濾。
2.6 多線程模塊
爬蟲主要消耗三種資源:網(wǎng)絡(luò)寬帶,中央處理器和磁盤。三者中任何一者都有可能成為瓶頸,其中網(wǎng)絡(luò)快帶一般是租用,價格相對昂貴。為了增加爬蟲效率,最直接的方法就是使用多線程的方式進(jìn)行處理。在爬蟲系統(tǒng)中,將要處理的URL隊列往往是唯一的,多個線程順序地從隊列中取得URL,之后各自進(jìn)行處理(處理階段是并發(fā)進(jìn)行)。通??梢岳镁€程池來管理線程。
2.7 分布式處理
分布式計算是當(dāng)今計算技術(shù)的主流。這項技術(shù)也可以同時用在網(wǎng)絡(luò)爬蟲上面。把抓取任務(wù)分不到不同的節(jié)點分布,主要是為了可擴(kuò)展性,也可以使用物理分布的爬蟲系統(tǒng),讓每個爬蟲節(jié)點抓取靠近它的網(wǎng)站。
3 網(wǎng)絡(luò)爬蟲遍歷與實現(xiàn)
網(wǎng)絡(luò)爬蟲的抓取原理是從互聯(lián)網(wǎng)中的一個網(wǎng)頁開始,根據(jù)網(wǎng)頁中的超級鏈接逐個抓取網(wǎng)頁中鏈接的其他網(wǎng)頁。而網(wǎng)頁通過超級鏈接互相鏈接,組成了一個龐大的無形的網(wǎng),信息量十分龐大,網(wǎng)絡(luò)爬蟲不可能抓取所有的網(wǎng)頁信息,所以使用網(wǎng)絡(luò)爬蟲抓取網(wǎng)頁要遵循一定的原則,主要是廣度優(yōu)先原則和最佳優(yōu)先原則。
廣度優(yōu)先是網(wǎng)絡(luò)爬蟲會先抓取起始網(wǎng)頁中鏈接的所有網(wǎng)頁,然后再選擇其中的一個鏈接網(wǎng)頁繼續(xù)抓取在此網(wǎng)頁中鏈接的所有網(wǎng)頁。這是最常見的方式,這個方法也可以讓網(wǎng)絡(luò)爬蟲并行處理,提高它的抓取速度。
最佳優(yōu)先爬蟲策略則又被稱為頁面選擇問題,通常在有限寬帶條件下,盡可能的照顧到重要性高的網(wǎng)頁是一個很重要的考慮原則。實現(xiàn)最優(yōu)先爬蟲最簡單的方式可以使用優(yōu)先級隊列(PriorityQueue)來實現(xiàn)TODO表,這樣,每次選出來擴(kuò)展的URL就是具有最高重要性的網(wǎng)頁。在隊列中,先進(jìn)入的元素先出,但是在優(yōu)先隊列中,優(yōu)先級高的元素先出隊列。
例,假設(shè)有如下重要關(guān)系的節(jié)點D>B>C>A>E>F>I>H,則整個遍歷過程如表所示。
如果一個新的連接請求進(jìn)來的時候,連接池管理器檢查連接池中是否包含任何沒用的連接,如果有的話,則返回一個。如果連接池中所有的連接都忙并且最大的連接池數(shù)量沒有達(dá)到,就創(chuàng)建新的連接并且增加到連接池。當(dāng)連接池中在用的連接達(dá)到最大值,所有的新連接請求進(jìn)入隊列,知道一個連接可用或者請求超時。程序一開始初始化需創(chuàng)建若干數(shù)量的長鏈接。給它們設(shè)置一個標(biāo)識位,這個標(biāo)識位表示該鏈接是否空閑的狀態(tài)。如果需要發(fā)送數(shù)據(jù)的時候,系統(tǒng)給它分配一個當(dāng)前空閑的鏈接。同時,將得到的鏈接設(shè)置為忙,當(dāng)數(shù)據(jù)發(fā)送完畢后,把鏈接標(biāo)識位設(shè)置為閑,讓系統(tǒng)可以分配給下一個用戶,這樣使得兩種方式的優(yōu)點都充分的發(fā)揮出來。
4 結(jié)束語
搜索引擎的使用,使人們能夠更加方便快捷地從網(wǎng)絡(luò)上獲取想要的信息。隨著互聯(lián)網(wǎng)和計算機(jī)技術(shù)的不斷發(fā)展,傳統(tǒng)的通用搜索引擎已經(jīng)很難滿足人們的信息檢索要求,而主題搜索引擎的產(chǎn)生為信息檢索服務(wù)水平的提高帶來了福音。而作為搜索引擎的基礎(chǔ)部分,網(wǎng)絡(luò)爬蟲對于信息檢索服務(wù)的實現(xiàn)起著舉足輕重的作用。因而只有根據(jù)搜索引擎的發(fā)展和創(chuàng)新不斷優(yōu)化網(wǎng)絡(luò)爬蟲的設(shè)計,才能提高網(wǎng)絡(luò)爬蟲的性能以及主題搜索引擎的應(yīng)能。
參考文獻(xiàn):
[1]劉偉.搜索引擎中網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn)[J].科技傳播,2011,20.
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)17-0016-02
1 引言
現(xiàn)今,社會經(jīng)濟(jì)生活的各個方面變得越來越“互聯(lián)網(wǎng)化”,互聯(lián)網(wǎng)式經(jīng)濟(jì)貿(mào)易逐漸取代傳統(tǒng)的經(jīng)濟(jì)模式,互聯(lián)網(wǎng)金融市場的快速發(fā)展,在我國的經(jīng)濟(jì)結(jié)構(gòu)中形成了服務(wù)于互聯(lián)網(wǎng)金融的主流經(jīng)濟(jì)模式。致使各大商業(yè)銀行也更加積極地開創(chuàng)互聯(lián)網(wǎng)經(jīng)濟(jì)方面的業(yè)務(wù),也強(qiáng)化了實體經(jīng)濟(jì)的服務(wù)效率。
“互聯(lián)網(wǎng)金融+”這個新興事物越來越多地融入我們的生活,改變了我們以往的生活方式?,F(xiàn)在流行的打車軟件,以電子支付為交易方式,改變了傳統(tǒng)的支付方式;網(wǎng)絡(luò)銀行的快速發(fā)展為我們提供了新的理財方式;P2P信貸使得我們的消費和貸款有了新的途徑;眾籌產(chǎn)業(yè)的發(fā)展讓每個人都可以參與到創(chuàng)新新模式中來,這些新的變化改變著我們的生活,使得我們生活增添了新的色彩,互聯(lián)網(wǎng)金融在未來會越來越成為主流。
網(wǎng)絡(luò)技術(shù)的快速發(fā)展,使得網(wǎng)絡(luò)上各種重要的數(shù)據(jù)信息越來越多,互聯(lián)網(wǎng)金融領(lǐng)域的發(fā)展也更加依賴于網(wǎng)絡(luò)來獲取重要的數(shù)據(jù)信息,以供研究發(fā)展。在互聯(lián)網(wǎng)中,時時刻刻都有各式各樣的金融網(wǎng)站實時的數(shù)據(jù)信息,如股票的走勢、某個公司的運營情況、某個專家對當(dāng)前經(jīng)濟(jì)形式的分析、在經(jīng)濟(jì)領(lǐng)域新產(chǎn)生了哪些技術(shù)等等。大型金融機(jī)構(gòu)或者理財?shù)膫€人都需要最前沿的工具來抓取這些必要的數(shù)據(jù)信息,以供研究。
在互聯(lián)網(wǎng)金融領(lǐng)域,爬蟲程序開發(fā)所面臨的主要問題是采集性能和反封鎖。大多數(shù)情況下,采用并發(fā)程度高的線程搜索網(wǎng)頁數(shù)據(jù)是可行的,但是,前提是所訪問的網(wǎng)站沒有設(shè)置反爬蟲的程序,例如設(shè)置防火墻、填寫驗證碼什么的。很多時候有價值的信息都不會輕易被獲取,因為網(wǎng)站可能會靠這些數(shù)據(jù)信息盈利,所以設(shè)置反爬蟲的措施,限制訪問的頻率,一旦IP地址被封掉,什么程序就都沒用了。所以,爬取數(shù)據(jù)的公司一般要運營維護(hù)一個IP地址池,同時,這也會出現(xiàn)IP是否穩(wěn)定的問題,這些問題無法被避免,我們針對具體問題具體分析,最高效、最快速的完成爬取數(shù)據(jù)的任務(wù)。
目前,爬蟲已在互聯(lián)網(wǎng)金融領(lǐng)域的需求呈現(xiàn)出幾何增長的趨勢。未來互聯(lián)網(wǎng)經(jīng)濟(jì)將在我國總的經(jīng)濟(jì)產(chǎn)業(yè)中占有更高的比重,獲取一些重要的網(wǎng)絡(luò)信息都得需要爬蟲技術(shù)的參與,爬蟲技術(shù)為適應(yīng)新的需求,將會不斷地更新發(fā)展。
2 關(guān)鍵方法和技術(shù)
2.1 多線程機(jī)制
網(wǎng)絡(luò)爬蟲需要下載規(guī)模非常龐大的網(wǎng)頁,如果僅僅采用單線程來操作,采集效果會非常差,并且會浪費大量的時間,因為爬蟲程序向服務(wù)器提交請求后要等待服務(wù)器的處理和返回結(jié)果,如果采用單線程,每個線程依次發(fā)送請求并等待服務(wù)器的依次響應(yīng),等待時間是所有網(wǎng)頁處理過程的疊加,效率大大降低。因此,可采用多線程機(jī)制來減少個別網(wǎng)頁的處理時間,以提高程序的效率。
2.2數(shù)據(jù)庫訪問技術(shù)
爬蟲技術(shù)采用隊列管理的方式,基于SQLserver數(shù)據(jù)庫。在本程序中,我們通過JAVA中的jdbc來操作數(shù)據(jù)庫,通過建立JDBC和ODBC之間的鏈接,即建立所謂的JDBC-ODBC橋接器,和數(shù)據(jù)庫的連接工作由ODBC去完成。JDBC的作用就是允許程序向數(shù)據(jù)庫發(fā)送SQL語句,而且可以指定數(shù)據(jù)的返回類型。
3 實現(xiàn)過程
3.1 爬蟲程序中的主要類和函數(shù)
首先,創(chuàng)建InteralCrawler類,用來實現(xiàn)爬蟲程序基本的功能,包括多線程機(jī)制獲取網(wǎng)頁、處理網(wǎng)頁、搜索新的URL等功能。此外,InteralCrawler類還作為爬蟲程序接口,并且由其對象管理線程。
CrawWork類用來創(chuàng)建工作對象,工作對象處理InteralCrawler所訪問的網(wǎng)頁鏈接。當(dāng)程序啟動時,CrawWork對象將請求處理網(wǎng)頁鏈接。該對象調(diào)用InteralCrawler對象的getWorkload()方法,該方法將返回一個還未處理的網(wǎng)頁鏈接。
3.3 多線程的設(shè)計
在我們使用多線程機(jī)制來設(shè)計爬蟲時,大致流程的是:每個爬蟲線程抓取的數(shù)據(jù)要聚集起來,再統(tǒng)一處理,然后讓空閑的爬蟲程序分去處理新的網(wǎng)頁數(shù)據(jù)。這個工作流程可以讓我們聯(lián)想到master-slave模式,這個模式就相當(dāng)于在建筑一個工程時,包工頭和建筑工人之間的關(guān)系,包工頭統(tǒng)一規(guī)劃整個項目的實施流程并向工人下發(fā)任務(wù),工人只需出力完成任務(wù)。根據(jù)這個模式,我們設(shè)計爬蟲線程。如下圖,多線程爬蟲如圖1所示。
線程的設(shè)計是爬蟲程序的關(guān)鍵部分,爬蟲線程通過最佳優(yōu)先算法根據(jù)一個網(wǎng)頁得到其所有鏈接網(wǎng)頁的URL,再搜索所有鏈接到頁面中的關(guān)鍵字。如果搜索到所需數(shù)據(jù),爬蟲程序通過窗口指針向用戶報告。如果未搜索到數(shù)據(jù),結(jié)束線程,拋棄所有變量,正常返回。
算法思想如下 :
4 總結(jié)
爬蟲技術(shù)在互聯(lián)網(wǎng)+時代具有廣泛的實際應(yīng)用價值,通過爬蟲技術(shù)可以實現(xiàn)網(wǎng)頁挖掘的核心算法。然而值得一提的是,爬蟲在訪問某些網(wǎng)頁時,可能會遇到一些反爬措施,例如數(shù)據(jù)加密、網(wǎng)頁權(quán)限等問題,有些網(wǎng)站只有有權(quán)限的用戶能訪問。網(wǎng)上有一些出售數(shù)據(jù)的網(wǎng)站他們希望網(wǎng)絡(luò)爬蟲能爬取到他們的報告(相當(dāng)于給自己打了個廣告),但是又不能讓這些數(shù)據(jù)資源免費被爬蟲程序爬取,網(wǎng)站會給網(wǎng)絡(luò)爬蟲一個用戶名和密碼,使得網(wǎng)絡(luò)爬蟲可以訪問網(wǎng)站一部分?jǐn)?shù)據(jù),重要的數(shù)據(jù)會設(shè)置權(quán)限。
參考文獻(xiàn):
[1] 潘春華,常敏.面向web的信息收集工具的設(shè)計與開發(fā)[J].計算機(jī)應(yīng)用研究,2002,13(6):144-148。
[2] 杜亞軍.爬蟲算法設(shè)計與程序?qū)崿F(xiàn)[J].計算機(jī)應(yīng)用,2004.
隨著計算機(jī)和互聯(lián)網(wǎng)技術(shù)的不斷成熟和大量使用。怎樣快速的幫用戶在茫茫的互聯(lián)網(wǎng)的海洋中找到需要的信息,已經(jīng)成了互聯(lián)網(wǎng)研究的一項重要的內(nèi)容。為了讓用戶在互聯(lián)網(wǎng)中快速有效的進(jìn)行互聯(lián)網(wǎng)搜索信息,一類被稱為搜索引擎的搜索工具隨之產(chǎn)生,給用戶和他們所要搜索的信息之間提供了一座橋梁。而搜索引擎最重要的部分是網(wǎng)絡(luò)爬蟲,所以網(wǎng)絡(luò)爬蟲為搜索功能的實現(xiàn)奠定了重要的基石。
水稻是我國最重要的食品之一,在我國種植面積很大,分布全國各個地區(qū)。而影響我國每年的水稻產(chǎn)量的重要因素之一就是水稻的病蟲害的發(fā)生,其控制水稻病蟲害發(fā)生的問題一直是提高水稻產(chǎn)量的重要且急需解決的問題。
為結(jié)合科技力量進(jìn)一步加快水稻病蟲害防治的研究步伐,本文擬采用水稻病蟲害圖像網(wǎng)絡(luò)爬蟲搜索引擎,進(jìn)一步推進(jìn)水稻病蟲害研究,有效改善水稻生產(chǎn),進(jìn)一步地促進(jìn)我國水稻病蟲害的法治,讓我國的水稻產(chǎn)量得到有力的提升。
1 國內(nèi)外研究現(xiàn)狀
目前,基于爬蟲技術(shù)的搜索引擎在互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展中閃耀,給農(nóng)作物病蟲害防治的研究提供了技術(shù)上的支持。同時,發(fā)達(dá)國家對水稻等作物病蟲害防治情況的大力關(guān)注,越來越多的國家和機(jī)構(gòu)加入使用爬蟲技術(shù)來控制病蟲害行列中來。
隨著科學(xué)技術(shù)和生活水平的提高,網(wǎng)絡(luò)已經(jīng)成為人們生活的一部分,各種搜索引擎紛紛涌現(xiàn),作為基礎(chǔ)技術(shù)的爬蟲技g也越來越成熟,國內(nèi)許多搜索引擎巨頭如百度,搜狗等等迅速向前推進(jìn),分別推出了各自的搜索引擎系統(tǒng)。同時,中國的“五年計劃”高度關(guān)注農(nóng)業(yè)發(fā)展,使得爬蟲技術(shù)在農(nóng)作物病蟲害防治的問題上越來越受到公眾的關(guān)注。
2 網(wǎng)絡(luò)爬蟲的定義
網(wǎng)絡(luò)爬蟲(也稱為蜘蛛)是一種客戶端程序或腳本,顧名思義,網(wǎng)絡(luò)爬蟲能像“蜘蛛”一樣在特定的范圍內(nèi)獲取到所需要的信息,網(wǎng)絡(luò)爬蟲是根據(jù)某些特定的規(guī)則來自動抓取網(wǎng)絡(luò)上的信息。而且網(wǎng)絡(luò)爬蟲是搜索引擎的重要組成部分,通過對網(wǎng)頁的自動提取,能從網(wǎng)頁獲取到搜索引擎所需的頁面。在爬取網(wǎng)頁信息時,為獲取初始頁面的URL列表,需從一個或多個初始網(wǎng)頁的URL進(jìn)行抓取,在抓取的過程中,自動將當(dāng)前頁面的新URL從隊列中分類到抓取狀態(tài),直到滿足系統(tǒng)的停止條件為止。
3 水稻病蟲害圖像網(wǎng)絡(luò)爬蟲設(shè)計
3.1 網(wǎng)絡(luò)爬蟲的模型分析
首先是抓取URL鏈接地址。從URL地址抓取開始,先確定URL是否重復(fù),然后根據(jù)預(yù)先設(shè)置的廣度來抓取圖像,搜索圖像時通過設(shè)計的算法和排序方式來進(jìn)行搜索。搜索完成后將與主題相關(guān)的圖像篩選出來,然后將篩選后的圖下像載到本地中,與此同時也通過jdbc將圖像存儲到數(shù)據(jù)庫中。然后任務(wù)列表再次開始抓取URL,使網(wǎng)絡(luò)抓取器運行,依次循環(huán),直到要抓取的URL線程完成為止。
3.2 網(wǎng)絡(luò)爬蟲的搜索策略
廣度優(yōu)先搜索策略是在當(dāng)前搜索級別完成之后再執(zhí)行下一級搜索。在盡可能多的頁面的覆蓋范圍內(nèi),通常使用廣度優(yōu)先搜索方法來抓取用戶所需要的信息,同時也因為該算法的設(shè)計和實現(xiàn)相對簡單。有許多研究將廣泛優(yōu)先搜索策略應(yīng)用于聚焦爬網(wǎng)程序?;舅枷胧?,初始URL與頁面之間的距離內(nèi)具有一定的鏈接與主題的相關(guān)程度很大。另一種方法是使用廣度優(yōu)先搜索和網(wǎng)絡(luò)過濾技術(shù),首先采用廣度優(yōu)先策略來抓取頁面,然后不相關(guān)的頁面過濾掉。這些方法的缺點是隨著爬網(wǎng)數(shù)量的增加,大量不相關(guān)的頁面將被下載和過濾,并且算法的效率會降低
3.3 水稻病蟲害圖像網(wǎng)絡(luò)爬蟲設(shè)計
本設(shè)計通過研究異步JavaScript網(wǎng)絡(luò)爬蟲系統(tǒng)的關(guān)鍵技術(shù)問題,采用基于對象的程序切片算法,以及腳本執(zhí)行引擎與切片模塊的互操作技術(shù)進(jìn)行設(shè)計。
將功能模塊分為前臺界面顯示和后臺數(shù)據(jù)抓取存庫。前臺界面顯示主要分為兩個部分:搜索導(dǎo)航部分和數(shù)據(jù)顯示部分。界面分上下兩個部分,上部分為搜索導(dǎo)航部分,比占40%;下部分為數(shù)據(jù)顯示部分,比占60%。上部分是用來關(guān)鍵字搜索導(dǎo)航,對要搜索的水稻病蟲害關(guān)鍵字進(jìn)行全站搜索;下部分是用來顯示搜索到的數(shù)據(jù),用表格的形式分別顯示水稻病蟲害圖片和相關(guān)介紹信息。后臺數(shù)據(jù)抓取存庫主要分為兩個部分:抓取水稻病蟲害數(shù)據(jù)和數(shù)據(jù)存入數(shù)據(jù)庫。
通過關(guān)鍵字來獲取并下載水稻病蟲害圖像主題的網(wǎng)絡(luò)爬蟲程序,下載滿足客戶需求的水稻病蟲害圖像。根據(jù)用戶的不同需求,水稻病蟲害主題網(wǎng)絡(luò)爬蟲程序需要實現(xiàn)以下目標(biāo):基于多線程設(shè)計,下載用戶需求的所有的水稻病蟲害圖像,篩選出用戶所需要的圖像通過一定的正則表達(dá)式和算法,通過關(guān)鍵字來獲取水稻病蟲害圖像主題的一個網(wǎng)絡(luò)爬蟲程序,通過設(shè)定的關(guān)鍵字來爬取網(wǎng)絡(luò)上的圖像,并下載滿足客戶需求的圖像。
4 小結(jié)
運行爬蟲程序后,在控制臺輸入要爬取的圖像關(guān)鍵字,程序會在本地中生成一個image文件夾,文件夾內(nèi)容包含html、img、txt三個文件夾,還有一個url.txt文本文件。Img文件夾是保存爬取下載的水稻病蟲害圖像,根據(jù)水稻病蟲害的分類,img文件夾中可以實現(xiàn)八類不同病蟲害圖像的文件:稻曲病圖像、稻瘟病圖像、惡苗病圖像、胡麻葉斑病圖像、霜霉病圖像、紋枯病圖像、小球菌核病圖像、葉鞘腐敗病圖像。
【參考文獻(xiàn)】
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-914X(2015)05-0226-01
1 引言
隨著互聯(lián)網(wǎng)的高速發(fā)展,網(wǎng)絡(luò)上的信息量迅速增加,特別是近些年來,網(wǎng)絡(luò)信息呈爆發(fā)式增長。有時候我們訪問網(wǎng)頁時,網(wǎng)頁上出現(xiàn)太多的不必要的信息,比如各種垃圾廣告和植入信息。
在互聯(lián)網(wǎng)的發(fā)展中,用戶體驗占據(jù)了至關(guān)重要的作用。正是由于每天都有巨大的信息量通過互聯(lián)網(wǎng)傳遞給我們,所以我們要通過工具對其進(jìn)行篩選,對于我們所需要的信息,則可以借助關(guān)鍵字來獲取我們所想要的信息。
從上個世紀(jì)九十年代開始,人們就已經(jīng)開展和研究網(wǎng)絡(luò)爬蟲。爬蟲這項技術(shù)在現(xiàn)在已經(jīng)非常成熟了,同時它也是搜索引擎的重要組成成分。Nutch,Larbin,Heritrix都是網(wǎng)絡(luò)上很有名的開源爬蟲。對于網(wǎng)絡(luò)爬蟲來說,網(wǎng)頁搜索策略和網(wǎng)頁分析策略都是很重要的部分。
現(xiàn)在對于大眾來說,比較熟悉的爬蟲引擎有雅虎、谷歌、百度等。這些搜索引擎和本文所要研究的不一樣。但是大概的原理在一定程度上是相似的。
至可以說是垃圾信息,頁面分析的爬蟲技術(shù)就是基于此產(chǎn)生的,用來獲取更有價值的信息。
2 網(wǎng)頁爬蟲系統(tǒng)的分析
2.1 系統(tǒng)功能需求
網(wǎng)頁爬蟲系統(tǒng)的設(shè)計與實現(xiàn)需要考慮好系統(tǒng)的功能健全還要考慮好系統(tǒng)的的擴(kuò)展和系統(tǒng)的性能,為了方便以后對系統(tǒng)進(jìn)行重構(gòu),系統(tǒng)設(shè)計需要按照以下的規(guī)則:
(1)系統(tǒng)為多線程機(jī)制
網(wǎng)絡(luò)爬蟲支持多線程同時進(jìn)行操作,爬蟲在局域網(wǎng)內(nèi)并行運行,從而使系統(tǒng)的整體運行的效率得到提高,并且在最短的時間獲取所需的信心。
(2)系統(tǒng)的功能完善
2.2 系統(tǒng)功能設(shè)計
網(wǎng)頁爬蟲要實現(xiàn)更加人性化,就要從指定的URL地址抓取到特定的頁面內(nèi)容,接著解析出頁面中的鏈接地址,然后再去訪問這些URL,重復(fù)進(jìn)行,直到得到的結(jié)果滿意,爬蟲存在的目的就在于此,根據(jù)這個宗旨。
根據(jù)需求,需要實現(xiàn)以下幾個基本功能模塊:
(1)網(wǎng)頁爬取模塊:主要實現(xiàn)的是通過從URL管理傳獲取 URL,進(jìn)行地址析,通過 HTTP 協(xié)議訪問URL指定的頁面,同時接收服務(wù)器端傳送的頁面信息。
(2)搜索策略模塊:主要實現(xiàn)的是管理爬取網(wǎng)頁所選取的搜索策略,寬度優(yōu)先搜索算法是本系統(tǒng)采用的算法,對搜索算法進(jìn)行改進(jìn)并提高搜索效率。
(3)解析頁面模塊:主要是實現(xiàn)提取的頁面內(nèi)容,提取的內(nèi)容有Css 腳本,圖片,視頻,文本,鏈接,Js,等其他文件。
3 系統(tǒng)主要功能模塊設(shè)計
3.1 網(wǎng)頁爬取模塊設(shè)計
(1)網(wǎng)頁爬取過程
系統(tǒng)開始就需要實現(xiàn)網(wǎng)頁的爬取,通過所要抓取的內(nèi)容以及給定指定的URL網(wǎng)址,這個模塊也是系統(tǒng)的核心,網(wǎng)絡(luò)中相關(guān)的網(wǎng)頁需要被爬蟲去收集。網(wǎng)頁信息要爬取再保存到本地。本系統(tǒng)設(shè)計的爬蟲是通過多線程分配并行進(jìn)行調(diào)度的,URL地址先從URL隊列中獲得,再從Web服務(wù)器發(fā)送數(shù)據(jù)請求接收Web服務(wù)器返回的數(shù)據(jù);返回存儲到本地的網(wǎng)頁數(shù)據(jù)進(jìn)行格式化。
對于以上的流程,為了避免耗費不必要的時間以及無限制等待響應(yīng)緩慢的服務(wù)器或規(guī)模龐大的網(wǎng)頁,我們必須必須需要注意的是HTTP向Web服務(wù)器發(fā)送請求后,等待機(jī)制需要被設(shè)定超時。響應(yīng)包的頭部會被客戶端解析出來,獲得重定向信息和狀態(tài)編碼。循環(huán)的重定向一個循環(huán)的鏈?zhǔn)欠翊嬖诳梢酝ㄟ^維護(hù)一個URL哈希表來檢測的,如阻止進(jìn)一步循環(huán)的相同的URL在鏈中出現(xiàn)的話則。必要的錯誤檢測和異常處理在頁面獲取過程中是非常重要的,因為程序代碼必須能處理服務(wù)器的各種響應(yīng)。
(2)HTTP協(xié)議
對于HTTP協(xié)議需要了解,Java中有個HTTPClient組件與url進(jìn)行連接。
3.2 搜索策略模塊設(shè)計
啟動了爬去網(wǎng)頁的程序后,在Internet中開始搜索網(wǎng)頁,采用寬度優(yōu)先算法。這種搜索算法就是數(shù)據(jù)結(jié)構(gòu)中的寬度優(yōu)先算法,思路是這樣的:最先獲取指定的URL的網(wǎng)頁,然后提取該網(wǎng)頁中的所有URL,在一個個的去獲取URL地址,如何沒有的話,就結(jié)束這個遍歷,同一個層次的網(wǎng)頁上的URL鏈接遍歷完了后,就繼續(xù)下一層。就這樣一層層的進(jìn)行處理,不過這樣有可能導(dǎo)致一個無窮的遍歷,如果是一個環(huán)狀圖的話就可能變成一個死循環(huán)了。不過它的好處就是能計算出網(wǎng)絡(luò)中兩個節(jié)點的最短路徑,所以它經(jīng)常被作為實現(xiàn)爬蟲的最佳策略,又因為這個算法十分的容易實現(xiàn),所以我們采用該算法來實現(xiàn)。
3.3 頁面分析模塊設(shè)計
通過爬蟲搜索指定URL的內(nèi)容進(jìn)行分析,搜索下來的網(wǎng)頁,進(jìn)行URL處理,網(wǎng)頁正文,Xml,Javascipt腳本,Css文件提取,通過指定相應(yīng)的規(guī)則來進(jìn)行分析。
抓取網(wǎng)頁的源碼,然后去判斷網(wǎng)頁的編碼,否則很大程度上會獲取到亂碼。首先看看的Http頭的Charset,一般來書,這個會比較準(zhǔn),然后再看Http的頭里的Charset和網(wǎng)頁的Meta里聲明的Charset是否一致,所以人工加了一次判斷,若不同的話就到內(nèi)存流里使用網(wǎng)頁的編碼去重新讀取一次源代碼。
3.4 網(wǎng)頁管理模塊設(shè)計
(1)網(wǎng)頁保存
網(wǎng)頁信息的保存,通過緩存空間保存網(wǎng)頁信息的系統(tǒng),可以為各個頁面設(shè)置獨立的文件用來保存網(wǎng)頁的基本信息,各個文件的名字可以按照頁面中的URL層次來進(jìn)行劃分,本地緩存文件目錄的建立,保存到本地數(shù)據(jù)庫將抓取到的網(wǎng)頁,與此同時還需要抓取頁面的網(wǎng)頁標(biāo)題、URL地址、網(wǎng)頁爬取的時間、網(wǎng)頁大小、網(wǎng)頁類型、保存位置等信息,保存到數(shù)據(jù)庫中。
(2)頁面本地化
通過中間的過濾服務(wù)器就得到了比較分析滿足我們要的 Web 頁面,但是在一定程度上我們的要求還是沒有達(dá)到,我們需要去做的是對 Web 頁面的內(nèi)容進(jìn)行分析和提取,大致需要被提取的內(nèi)容有:
a 頁面文本內(nèi)容
b 頁面的網(wǎng)頁鏈接地址
c 獲取網(wǎng)頁中的 css,javascript 腳本
d 獲取網(wǎng)頁中的圖片文件
e 獲取網(wǎng)頁中的多媒體文件
最開始我們通過爬蟲獲取得到的網(wǎng)頁html文件,然后將圖片,多媒體,css,js都抓取下來,接著對應(yīng)現(xiàn)在的內(nèi)容鏈接進(jìn)行本地化處理,最后再本地頁面中的鏈接中進(jìn)行修改了,修改后獲取的內(nèi)容通過濾服務(wù)器來進(jìn)行過濾。最后呈現(xiàn)在我們眼前的就是一個和原來一樣的本地化網(wǎng)頁了。
參考文獻(xiàn)
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-3973(2013)007-063-03
1 引言
隨著新媒體的飛速發(fā)展與逐漸成熟,新媒體這一媒體形式憑借其便利、便捷的特點獲得了人們的認(rèn)可和關(guān)注。由于新媒體平臺的數(shù)量增長,人們已經(jīng)逐漸迷失在浩瀚的網(wǎng)絡(luò)中,無法在有限的時間內(nèi)及時、準(zhǔn)確地獲得想要的信息,所以對新媒體進(jìn)行有效的資源整合成了解決這一問題的首要途徑。本文以四川大學(xué)教務(wù)處網(wǎng)站、四川大學(xué)團(tuán)委網(wǎng)站、四川大學(xué)學(xué)生工作處網(wǎng)站為研究背景,結(jié)合計算科學(xué)技術(shù),提出了新媒體資源整合的方法,使廣大的學(xué)生群體在有限的課余時間內(nèi)準(zhǔn)確、高效地了解校內(nèi)外的資訊。
本文主要工作包括:(1)研究四川大學(xué)網(wǎng)絡(luò)媒體現(xiàn)狀;(2)提出新媒體平臺數(shù)量增長背景下,如何及時、高效地獲取資訊的辦法;(3)介紹新媒體資源整合的核心技術(shù) ― 網(wǎng)絡(luò)爬蟲技術(shù)及相關(guān)關(guān)鍵技術(shù);(4)結(jié)合網(wǎng)絡(luò)爬蟲技術(shù)設(shè)計資源整合網(wǎng)站,整合四川大學(xué)教務(wù)網(wǎng)站、學(xué)生工作處網(wǎng)站、團(tuán)委網(wǎng)站的資訊。
2 四川大學(xué)網(wǎng)絡(luò)媒體現(xiàn)狀分析
經(jīng)調(diào)查,四川大學(xué)學(xué)生最經(jīng)常訪問的校園官方網(wǎng)絡(luò)平臺有“四川大學(xué)教務(wù)處網(wǎng)站”、“四川大學(xué)團(tuán)委網(wǎng)站”、“四川大學(xué)學(xué)生工作處網(wǎng)站”,其主要原因在于以上幾個網(wǎng)絡(luò)媒體平臺經(jīng)常頒布貼近學(xué)生校園生活的資訊信息,學(xué)生急需從中獲取及時的資訊了解校園內(nèi)的實時動態(tài)。現(xiàn)階段,四川大學(xué)官方網(wǎng)絡(luò)媒體具有以下幾個特點:
2.1 資訊重復(fù)出現(xiàn),缺乏系統(tǒng)性
新媒體飛速發(fā)展,其主要原因在于其便捷和便利的特點。經(jīng)過調(diào)查發(fā)現(xiàn),四川大學(xué)教務(wù)處網(wǎng)站、團(tuán)委網(wǎng)站、學(xué)生工作處網(wǎng)站上經(jīng)常出現(xiàn)資訊重復(fù)的現(xiàn)象,一則通知或新聞因其工作性質(zhì)與網(wǎng)站直屬單位相同而被同時在多個網(wǎng)絡(luò)平臺上。網(wǎng)頁的主頁設(shè)計中,一般會將5-8條的資訊顯示在主頁面上,其余的資訊需點擊“更多”進(jìn)行查看。學(xué)生在瀏覽網(wǎng)站了解資訊時,主要關(guān)注的就是頁面中通知欄、新聞欄的即時信息,很少點擊“更多”查看未全部顯示的信息,如此重復(fù)信息的出現(xiàn),極可能導(dǎo)致信息的更新而使學(xué)生錯過還未閱讀的資訊信息。
2.2 資訊分布廣,使用效率低
資訊分布廣是現(xiàn)階段四川大學(xué)網(wǎng)絡(luò)平臺的一個主要特點,同時也是一個亟待解決的問題。廣泛的信息分布使學(xué)生在瀏覽信息時疲于奔命,再加之校園網(wǎng)刷新速度較慢,很大程度上降低了學(xué)生的使用效率。效率降低了,也違背了新媒體這一新興產(chǎn)業(yè)的初衷,高效率的獲取資訊是廣大學(xué)生的需求。
3 及時、高效地獲取資訊的對策研究
3.1 及時性
所謂及時性,需要使學(xué)生在瀏覽網(wǎng)頁時能第一時間了解到同步更新的資訊。
3.2 高效性
所謂高效性,需要使學(xué)生在有限的時間內(nèi)盡可能多得獲得有效的資訊。
結(jié)合以上兩點,資源整合概念是解決這一問題的最佳對策。
資源整合是系統(tǒng)論的思維方式,針對本文提出的問題,就是要通過科學(xué)化的方法將四川大學(xué)教務(wù)處網(wǎng)站、團(tuán)委網(wǎng)站、學(xué)生工作處網(wǎng)站彼此相關(guān)但又分離的資訊,通過計算機(jī)科學(xué)技術(shù)的方法整合到一起。
具體方法是設(shè)計一個四川大學(xué)資訊整合網(wǎng)站,將三個網(wǎng)站的通知、新聞獲取到一個網(wǎng)站上,使學(xué)生在登陸瀏覽一個網(wǎng)站時就可以關(guān)注到三個網(wǎng)站的實時信息。同時,網(wǎng)站將使用自動更新技術(shù)實現(xiàn)及時性,使用去除重復(fù)的方法實現(xiàn)高效性。
4 實現(xiàn)資源整合的核心技術(shù)
網(wǎng)絡(luò)爬蟲是在搜索引擎領(lǐng)域中廣泛使用的技術(shù),而其主要是根據(jù)用戶的需求,在制定的網(wǎng)絡(luò)范圍內(nèi)搜尋消息。這項技術(shù)可以運用在實現(xiàn)本文提出的資源整合理念上。本節(jié)將概述網(wǎng)絡(luò)爬蟲技術(shù)并介紹實現(xiàn)網(wǎng)絡(luò)爬蟲相關(guān)技術(shù)。
4.1 網(wǎng)絡(luò)爬蟲技術(shù)概述
網(wǎng)絡(luò)爬蟲是通過網(wǎng)頁的鏈接地址尋找網(wǎng)頁的程序,如圖1所示,它從網(wǎng)站的某一個頁面開始讀取網(wǎng)頁的內(nèi)容,找到網(wǎng)頁的其他鏈接地址,然后不斷地遞歸循環(huán),直到把網(wǎng)站內(nèi)所需資源遍歷完整為止。
在抓取網(wǎng)頁的時候,網(wǎng)絡(luò)爬蟲一般有兩種策略:(1)廣度優(yōu)先策略;(2)深度優(yōu)先策略。
4.2 Java語言
Java語言具有簡單性、多線程性、與平臺無關(guān)性的特點。
網(wǎng)絡(luò)爬蟲需要對多個頁面進(jìn)行解析,顯然,單線程的工作效率極低,程序會因此出現(xiàn)瓶頸。單線程技術(shù)需要一個接一個地等待響應(yīng),等待時間將是每個網(wǎng)頁請求等待響應(yīng)的時間。因此,多線程是實現(xiàn)網(wǎng)絡(luò)爬蟲的必要技術(shù)。
4.3 Jsoup Html解析工具
Jsoup是一種Java的Html解析器,可以直接解析某個URL地址、HTML文本內(nèi)容。Jsoup提供了較為方便的API,可以通過類似于JQuery的操作方法進(jìn)行數(shù)據(jù)操作。
主要功能有:從URL中直接獲取頁面HTML,使用DOM、CSS選擇器查找、獲取數(shù)據(jù),實現(xiàn)對HTML的簡單操作。
4.4 JDBC數(shù)據(jù)庫訪問
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)15-0062-03
1 引言
隨著云時代的來臨,大數(shù)據(jù)的發(fā)展也越來越成為一種潮流。大數(shù)據(jù)通常用來指公司創(chuàng)造的大量結(jié)構(gòu)化和非機(jī)構(gòu)化化數(shù)據(jù),這些數(shù)據(jù)被獲取并存放到關(guān)系型數(shù)據(jù)庫,在分析數(shù)據(jù)時往往會花費大量的時間和精力。“大數(shù)據(jù)”在互聯(lián)網(wǎng)領(lǐng)域是指:互聯(lián)網(wǎng)公司在正常運行過程中會生成、累積用戶行為的網(wǎng)絡(luò)數(shù)據(jù)。這些數(shù)據(jù)的規(guī)模是非常龐大,甚至大到不能用G或T的計量單位來衡量。在大數(shù)據(jù)時代,爬蟲技術(shù)成為獲取網(wǎng)絡(luò)數(shù)據(jù)的重要方式。
互聯(lián)網(wǎng)金融發(fā)展過程中需要搜集大量的數(shù)據(jù)資源,這個過程非常關(guān)鍵,并且實施起來較為困難。金融數(shù)據(jù)的搜集,是通過計算機(jī)技術(shù)與金融領(lǐng)域相關(guān)知識的綜合,將金融經(jīng)濟(jì)的發(fā)展與相關(guān)數(shù)據(jù)進(jìn)行集中處理,能夠為金融領(lǐng)域的各個方面如經(jīng)濟(jì)發(fā)展趨勢、經(jīng)融投資、風(fēng)險分析等提供“數(shù)據(jù)平臺”,真實的數(shù)據(jù)資源還可以推進(jìn)金融經(jīng)濟(jì)的快速發(fā)展和金融理論的創(chuàng)新。當(dāng)今互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)上也充滿各種金融信息,并且更新速度快,這使互聯(lián)網(wǎng)成為金融領(lǐng)域獲取數(shù)據(jù)資源重要一大方式。例如Butler,Leone,Willenborg和 Frank等公司都是利用互聯(lián)網(wǎng)采集技術(shù)來抓取所需的數(shù)據(jù)資源。
2 互聯(lián)網(wǎng)金融數(shù)據(jù)抓取的特點
2.1 互聯(lián)網(wǎng)上金融方面的數(shù)據(jù)一般具有的特點
1)數(shù)據(jù)量大、種類繁多。對于一些規(guī)模較小且只需抓取一次的數(shù)據(jù),一般復(fù)制粘貼或者手工記錄即可,沒有什么技術(shù)上的要求。但是,金融經(jīng)濟(jì)市場領(lǐng)域的數(shù)據(jù)一般規(guī)模巨大,例如需要獲取某個結(jié)構(gòu)一年的交易記錄,數(shù)據(jù)量就是非常大的,而且數(shù)據(jù)資源往往來源于不同的機(jī)構(gòu)或者不同的部門,想要準(zhǔn)確地獲取數(shù)據(jù)資源不是很容易。
2)可靠性、實時性。在研究金融理論或者做金融分析時,對數(shù)據(jù)的可靠性、實時性要求非常高。金融經(jīng)濟(jì)的發(fā)展模式瞬息萬變,更新速度很快,為了及時的反映市場上經(jīng)濟(jì)發(fā)展?fàn)顩r,要求數(shù)據(jù)的來源具有實時性和可靠性。
3)金融經(jīng)濟(jì)領(lǐng)域的數(shù)據(jù)類型一般以文本和數(shù)值型為主,圖片和視屏等多媒體類型的數(shù)據(jù)較少。
4)數(shù)據(jù)一般會從較官方的網(wǎng)站抓取。為了保證數(shù)據(jù)來源的可靠性和準(zhǔn)確性,數(shù)據(jù)一般從較權(quán)威的機(jī)構(gòu)獲取,例如金融交易所、國家有關(guān)權(quán)威決策與信息部門和國內(nèi)外各大互聯(lián)網(wǎng)信息提供商。
5)抓取數(shù)據(jù)的目標(biāo)網(wǎng)頁主要有兩種類型。第一類是URL固定但是信息實時更新的網(wǎng)頁要定期訪問并獲取數(shù)據(jù),例如一些網(wǎng)站的股票行情類數(shù)據(jù);第二類是規(guī)模較大且近似網(wǎng)頁中具有固定特征的數(shù)據(jù)。例如某些國家權(quán)威機(jī)關(guān)按時以某一固定格式各種數(shù)據(jù)報告。
我們可根據(jù)金融經(jīng)濟(jì)數(shù)據(jù)的這些特點,制定相應(yīng)的方法與策略抓取數(shù)據(jù)資源。對于地址相對固定的網(wǎng)頁,所面臨的數(shù)據(jù)采集問題比較集中,不需要考慮各種技術(shù)因素的變化對采集的影響,我們可以更有針對性的收集數(shù)據(jù),制定更高效、更合理的抓取策略。
2.2 獲取網(wǎng)頁信息
目前主流的網(wǎng)站開發(fā)技術(shù)主要有php、net和java的Alexa等,雖然說開發(fā)的網(wǎng)頁格式五花八門,但它們傳輸數(shù)據(jù)的原理都一樣,都是通過超文本傳輸協(xié)議(HTTP協(xié)議)將數(shù)據(jù)資源傳送到客戶的。微軟公司提供的可擴(kuò)展標(biāo)記語言(XML)服務(wù)集合中的組件 MSXML(執(zhí)行或開發(fā)xml所設(shè)計的程序)里面有個 XMLHTTP瀏覽器對象。該對象的原理基于HTTP 協(xié)議的,里面封裝著很多方法和屬性,這些方法和屬性與網(wǎng)站信息雙向交流有關(guān)??蛻舳苏{(diào)用 XMLHTTP對象搜集網(wǎng)頁信息的過程主要包括以下幾個步驟:
①首先建立XMLHTTP對象;
②利用XMLHTTP對象里面的Open方法與服務(wù)端建立連接,制定網(wǎng)頁的地址(URL)和命令的發(fā)送方式;
③通過XMLHTTP中的Send 方法發(fā)送信息;
④等待服務(wù)端處理并返回結(jié)果。
數(shù)據(jù)的抓取在金融領(lǐng)域的研究中是一個關(guān)鍵環(huán)節(jié)?;ヂ?lián)網(wǎng)中的數(shù)據(jù)具有規(guī)模龐大、實時性、準(zhǔn)確性等特點,為金融經(jīng)濟(jì)的發(fā)展提供了重要的數(shù)據(jù)來源。通過爬蟲技術(shù)抓取數(shù)據(jù)資源,可以高效的在互聯(lián)網(wǎng)海量的數(shù)據(jù)中提取所需的數(shù)據(jù)資源。靈活而方便地定制抓取數(shù)據(jù)地方案,使抓取到的數(shù)據(jù)成為金融經(jīng)濟(jì)發(fā)展的可靠保證。
3 爬蟲技術(shù)的實現(xiàn)
爬蟲技術(shù)的設(shè)計是搜索引擎實現(xiàn)的關(guān)鍵技術(shù),爬蟲算法的好壞直接關(guān)系到搜索引擎性能的優(yōu)良。經(jīng)過多方面研究表明,“最好優(yōu)先算法”應(yīng)用于多重搜索中效果較好,但是這個算法本身也存在缺陷,例如收斂速度過快致使搜索的數(shù)據(jù)不全面,“查全率”太低?;谶@個問題,本文研究如何改進(jìn)這種算法,并實現(xiàn)網(wǎng)絡(luò)爬蟲。
3.1 網(wǎng)絡(luò)爬蟲的算法分析
爬蟲在整個網(wǎng)絡(luò)系統(tǒng)中自由搜索,能夠自動識別URL,自動下載網(wǎng)頁,并提取數(shù)據(jù)信息,存放到數(shù)據(jù)庫中。整個過程都不需要人工的參與。當(dāng)前主流的爬蟲算法主要有廣度優(yōu)先算法、深度優(yōu)先算法和最好優(yōu)先算法等。傳統(tǒng)的圖算法主要應(yīng)用在第一代web爬蟲索引整個網(wǎng)絡(luò),該算法是以一個網(wǎng)頁鏈接集作為核心,去遞歸的鏈接其他的網(wǎng)絡(luò)頁面,不關(guān)心網(wǎng)絡(luò)中的數(shù)據(jù)內(nèi)容,只追求在網(wǎng)絡(luò)上最大的覆蓋率,網(wǎng)頁的個數(shù)越多越好。算法如圖1所示。
3.1.1 深度優(yōu)先搜索算法
深度優(yōu)先搜索算法(DFS)在研究爬蟲技術(shù)早期使用較多,它的搜索目標(biāo)是要到達(dá)結(jié)構(gòu)的最外結(jié)點,即搜索到不包含超鏈接的HTML文件。在一個網(wǎng)頁中,當(dāng)一個鏈接被選擇后,鏈接的HTML文件執(zhí)行DFS算法,完整的沿著一條鏈接搜索,走到邊緣節(jié)點為止(即不包含任何鏈接的HTML文件),然后返回上一個頁面鏈接的但是未搜索過的頁面,再沿著這個搜索到的頁面執(zhí)行DFS算法即可。直到所有連接到的頁面被搜索完成,算法結(jié)束。DFS算法的優(yōu)點是能根據(jù)一個HTML文件查找到其所鏈接的所有HTML文件,能查出這個網(wǎng)頁在互聯(lián)網(wǎng)中的鏈接結(jié)構(gòu)。但是DFS算法也有很大的缺點,因為整個網(wǎng)絡(luò)的結(jié)構(gòu)是非常深的,各個網(wǎng)頁之間的鏈接關(guān)系也很復(fù)雜,很有可能陷入其中就無法返回。對于圖4-1中的結(jié)構(gòu),使用深度優(yōu)先遍歷算法的返回結(jié)果是:A-F-G;E-H-I;B;C;D。
3.1.2 寬度優(yōu)先搜索算法
廣度優(yōu)先(BFS),也叫寬度優(yōu)先,在這里的定義就是層層爬行,沿著結(jié)構(gòu)的寬度方向?qū)訉铀阉?。給定一個網(wǎng)頁的URL時,首先搜索這個URL所鏈接的所有網(wǎng)頁,遍歷完這網(wǎng)頁鏈接的所有網(wǎng)頁之后,再遍歷子網(wǎng)頁所鏈接的所有網(wǎng)頁,直至遍歷完所有的網(wǎng)頁為止,一般采用BFS策略來覆蓋范圍更廣的網(wǎng)頁。廣度搜索相對于深度搜索,對數(shù)據(jù)抓取更容易控制些。對服務(wù)器的負(fù)載相應(yīng)也明顯減輕了許多,爬蟲的分布式處理使得速度明顯提高。而且BFS算法能夠找到兩個網(wǎng)頁之間的最短路徑,并且不會像DFS那樣使程序陷入深層查找無法返回。缺點查找深層網(wǎng)頁時效率較低。對于圖4-1中的機(jī)構(gòu),BFS算法的訪問順序為A-B;C;D;F-G;E-H-I。
3.1.3 最好優(yōu)先搜索算法
最好優(yōu)先搜索(Best-First)是寬度優(yōu)先搜索的擴(kuò)展,基本算法思想是將各個節(jié)點表按照據(jù)目標(biāo)的距離排序,再以節(jié)點的估計距離為標(biāo)準(zhǔn)選擇待擴(kuò)展的節(jié)點。
搜索過程為:
1)先建立一個搜索圖G,里面包含初始節(jié)點集合S,open=(S), closed=()表示空表;
2)若集合open為空,則查找失敗,并退出程序;
3)n = first(open); remove(n, open); add(n, closed);
4)若 n為目標(biāo)結(jié)點,則查找成功 ,并可給出S到n的路徑;
5)否則,擴(kuò)展結(jié)點n, 生成不是n的祖先的后繼結(jié)點集M={m} 把每個m作為n的后繼結(jié)點加入G;
6)If m沒有在open和closed集合中出現(xiàn)過Then add(m, open);
7)If m在open集合中有重復(fù)結(jié)點k,且g(m)
8) If m在closed集合中有重復(fù)結(jié)點k,且g(m)
①將closed集合中的結(jié)點k改為結(jié)點m(只需修改主鏈指針和f、g);
②按后繼元素,修改k在open集合和closed集合中的后繼元素f,g的值;
9) 按f值,按從小到大的順序?qū)pen表中的結(jié)點排序,并重新返回到2步。
這些算法雖然都有各自的優(yōu)點,但是它們的綜合性能都不是很優(yōu)。本文對這些算法進(jìn)行了測試,結(jié)果表明最好最優(yōu)搜索算法在爬蟲技術(shù)應(yīng)用上性能最佳。所以重點對Best-First算法進(jìn)行研究并發(fā)現(xiàn),雖然算法查找網(wǎng)頁的準(zhǔn)確率很高,但是由于算法存在收斂速度過快的缺點,使得不能在較大規(guī)模的網(wǎng)絡(luò)上全面查找數(shù)據(jù),即“查全率”太低。如何設(shè)計程序,提高最好最優(yōu)算法的“查全率”才是網(wǎng)絡(luò)爬蟲技術(shù)實現(xiàn)的關(guān)鍵問題。
3.2 算法改進(jìn)
對圖2中的網(wǎng)絡(luò)模型進(jìn)行最佳優(yōu)先算法的搜索,假設(shè)A1,A3,B1,B2,B3,B4,B5是相關(guān)的URL,A2是干擾頁面,網(wǎng)絡(luò)爬蟲從A1開始查找。算法思想是:爬蟲程序經(jīng)過一定的計算,如果發(fā)現(xiàn)A2是不是查找目標(biāo),但是發(fā)現(xiàn)A1是要查找的網(wǎng)絡(luò)頁面,程序就會把A2的鏈接直接忽略掉,沿著A1的鏈接繼續(xù)搜索。這樣就會導(dǎo)致A3、B2、B3、B4、B5這些相關(guān)的頁面被爬蟲程序給忽略掉,從而大大降低了搜索效果,不能時爬蟲全面搜索整個網(wǎng)絡(luò)頁面。
其中:A1、A3、B1、B2、B3、B4、B5是相關(guān)頁面;
A2是干擾頁面;
C0、C1、C2、C3、C4、C5、C6是訪問路徑。
本文提出的改進(jìn)算法思想是,當(dāng)查找到A2頁面時,雖然這個頁面與主題無關(guān),但程序并不忽略這個鏈接,而是暫時保存起來,然后爬蟲程序計算A2所鏈接的頁面中是否存在需要用戶需要查找的頁面。算法設(shè)定一個參數(shù)f記錄crawler在遇到干擾頁面的鏈接時搜索的深度。只有當(dāng)爬蟲程序在搜索到f深度仍然沒有發(fā)現(xiàn)所需要的頁面,這時才會A2頁面忽略掉。例如在上圖中,如果爬蟲經(jīng)過c2、c3、c4、c5、c6這幾條路徑能夠找到相關(guān)頁面,就說明A2這個網(wǎng)頁包含很多所需要的網(wǎng)頁鏈接。根據(jù)這個思想,對最好優(yōu)先搜索算了進(jìn)行改進(jìn),以提高爬蟲程序的“查全率”。改進(jìn)算法利用了JAVA中的多線程機(jī)制,核心算法如下:
BF-BF(topic,starting-urls){
link_1=fetch link(starting_url);
While(visited
doc=fetch(link_1);
if(score_r1>r1)
{ enqueue_1(frontier,extract_links(doc),score_r1); }
else
{score_r2=link_score_r2(D,links);
if(score_r2>r2)
enqueue_1(frontier,extract_links(doc),score_r2);
else
enqueue_2(links); }}}
4 結(jié)束語
本文闡述了爬蟲技術(shù)在互聯(lián)網(wǎng)中的應(yīng)用,并以爬蟲搜索方法為研究目標(biāo),通過Java多線程對其中的最好最全算法進(jìn)行算法實現(xiàn)。隨著硬件技術(shù)、信息技術(shù)和物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,未來必將會出現(xiàn)大規(guī)?;诰W(wǎng)頁信息攫取的算法設(shè)計,各種新型的網(wǎng)絡(luò)應(yīng)用協(xié)議也會不斷問世,這些技術(shù)成果都將極大地促進(jìn)各類異構(gòu)網(wǎng)絡(luò)的融合過程,進(jìn)一步提高計算機(jī)通信網(wǎng)絡(luò)的數(shù)據(jù)分析功能。
參考文獻(xiàn):
[1] Otis Gospodnetic,Erik Hatcher.Lucene IN ACTION[M]. Manning Publication Co,2006.
[2] 袁津生,李群. 搜索引擎基礎(chǔ)教程[M]. 清華大學(xué)出版社,2010.
一、引言
互聯(lián)網(wǎng)的使用已經(jīng)滲入到社會的各個層面,特別是教育領(lǐng)域,為高等院校的本科教學(xué)提供了龐大的信息資源,但要從這么大的資源庫中尋找到自己需要的內(nèi)容卻是非常難。高校師生經(jīng)常會使用像google、baidu等搜索引擎來幫助尋找自己要的資源。但其超大規(guī)模的分布式數(shù)據(jù)源、異構(gòu)的數(shù)據(jù)及信息的檢索質(zhì)量不高等問題造成用戶很難找到真實要用的信息,使其無法直接為高校師生提供資源服務(wù)。為了解決這一問題,本文探究了一種基于聚焦搜索引擎的課程資源庫建設(shè)方案,為高校師生提供課程信息資源的檢索服務(wù)。
二、聚焦搜索引擎實現(xiàn)策略
聚焦搜索引擎是實現(xiàn)基于主題的信息采集功能的核心組成部分,一般由爬行隊列、網(wǎng)絡(luò)連接器、主題模型、內(nèi)容相關(guān)度分析以及鏈接相關(guān)度分析等功能模塊組成。
其中,爬行隊列是由一系列主題相關(guān)度較高的URL組成。爬行隊列在聚焦搜索引擎進(jìn)行主題搜索之初是由種子站點組成,這些種子站點可以由該行業(yè)領(lǐng)域的專家給出,也可以借助一些權(quán)威網(wǎng)站自動生成。在搜索過程開始之后,系統(tǒng)發(fā)現(xiàn)新的URL,并根據(jù)主題相關(guān)度對其排序后補(bǔ)充到爬行隊列中。網(wǎng)絡(luò)連接器則根據(jù)爬行隊列中的URL,與網(wǎng)絡(luò)建立連接后以下載其所指頁面內(nèi)容。
主題模型由主題建模方法來實現(xiàn)。主題詞法是常用的主題建模方法;關(guān)鍵詞法以一組特征關(guān)鍵詞來表示主題內(nèi)容,包括用戶需求主題,以及文檔內(nèi)容主圖。一個關(guān)鍵詞可以是單個的詞、短語、包括權(quán)重語種等屬性。
內(nèi)容相關(guān)度分析是指系統(tǒng)對經(jīng)過內(nèi)容特征提取后的網(wǎng)頁數(shù)據(jù)進(jìn)行分析,判定網(wǎng)頁內(nèi)容與指定主題相關(guān)度如何,過濾無關(guān)頁面,保留相關(guān)度達(dá)到閾值的網(wǎng)頁。
鏈接相關(guān)度分析是指系統(tǒng)對從網(wǎng)頁中提取的超鏈信息進(jìn)行測算,得出每個URL所指頁面與指定主題的相關(guān)度,將符合主題度要求的URL加入到爬行隊列中并對其進(jìn)行爬行優(yōu)先度排序,以保證相關(guān)度高的頁面優(yōu)先被檢索到。
檢索器為用戶提供查詢界面,根據(jù)用戶提出的檢索式對索引數(shù)據(jù)庫進(jìn)行檢索,按相關(guān)度高低對查詢結(jié)果排序后將頁面鏈接及相關(guān)信息返回給用戶。
管理平臺負(fù)責(zé)對整個系統(tǒng)進(jìn)行監(jiān)控和管理。主要實現(xiàn)確定主題、初始化爬行器、控制爬行過程、協(xié)調(diào)優(yōu)化模塊間功能實現(xiàn)、用戶交互等功能。作為一個完善的搜索引擎,管理平臺還應(yīng)供跨平臺應(yīng)用網(wǎng)絡(luò)服務(wù)應(yīng)用接口。
三、基于聚焦搜索引擎的課程資料庫建設(shè)所需技術(shù)
1、數(shù)據(jù)庫技術(shù):數(shù)據(jù)管理是現(xiàn)代計算機(jī)的一項重要應(yīng)用,對數(shù)據(jù)進(jìn)行分類、組織、編碼、存儲、檢索和維護(hù)的利用。數(shù)據(jù)庫技術(shù)為應(yīng)用程序提供了更為標(biāo)準(zhǔn)和開放式的接口。
2、面向?qū)ο蠹夹g(shù):面向?qū)ο蠹夹g(shù)對于復(fù)雜知識單元的結(jié)構(gòu)表示,課程資源庫的構(gòu)件化集成、信息處理模塊的整和等都是至關(guān)重要的。本建設(shè)課題以J2EE開發(fā)平臺為基礎(chǔ)。
3、網(wǎng)絡(luò)技術(shù):計算機(jī)網(wǎng)絡(luò)將地理位置不同并具有獨立功能的多臺計算機(jī)系統(tǒng)通過通信設(shè)備和線路連接起來,以功能完善的網(wǎng)絡(luò)軟件實現(xiàn)網(wǎng)絡(luò)資源共享的系統(tǒng)。
4、人工智能技術(shù):人工智能從學(xué)習(xí)者的結(jié)構(gòu)特征、知識的表示等方面來進(jìn)一步培養(yǎng)學(xué)習(xí)都能從龐大的知識庫從尋找到有價值的,值得學(xué)習(xí)的資料。
四、基于聚焦搜索引擎的課程資料庫的開發(fā)步驟
本系統(tǒng)首先對web中存在的相關(guān)指定課程資源的頁面進(jìn)行搜索,然后對搜索到的網(wǎng)頁進(jìn)行預(yù)處理與結(jié)構(gòu)分析,再從網(wǎng)頁中提取多媒體資源的相關(guān)文本,相關(guān)文本進(jìn)行拼音及英文翻譯轉(zhuǎn)換、中文分詞、關(guān)鍵詞過濾提取等操作,最終形成對指定課程相關(guān)資源進(jìn)行描述的信息庫。
1、搜集指定課程資源網(wǎng)頁。利用網(wǎng)絡(luò)資源搜索器baidu或google等搜索與多媒體相關(guān)的web頁面,利用頁面的HTML標(biāo)簽等屬性計算機(jī)內(nèi)容相似度。這個過程中包括將html代碼保存在一起,組建一個資源庫,利用搜索策略決定搜索器的爬行主題和爬行方向,提高搜索引擎的準(zhǔn)確率。
2、分析資源網(wǎng)頁和定位多媒體區(qū)域。獲取charset的屬性值,判斷網(wǎng)頁的編碼語言和編碼類型。接著定位多媒體區(qū)域,利用網(wǎng)頁結(jié)構(gòu)圖判斷資源的表格區(qū)域,將與資源描述相關(guān)的文本定位,尤其是那些導(dǎo)航文本對于資源的搜索非常重要。通過一定的算法將干擾的文本區(qū)域或干擾文本剔除,保留有利用價值的文本。
3、提取指定課程資源相關(guān)文本信息。
4、入庫所抓取的關(guān)鍵信息。提取的相關(guān)文本信息,只是做了一個關(guān)鍵字的選擇,還要將這些關(guān)鍵字入庫到數(shù)據(jù)庫,這部分工作就是信息入庫工作。
5、利用管理平臺負(fù)責(zé)對整個系統(tǒng)進(jìn)行監(jiān)控和管理。主要實現(xiàn)指定所要抓取的課程資源類型、關(guān)鍵詞、初始化爬行器、控制爬行過程、實現(xiàn)最終所抓取資源檢索、提取、展示等功能。
6、使用的開發(fā)工具:J2EE開發(fā)平臺(JDK1.6、Myeclipse7.0、Tomcat服務(wù)器)。開發(fā)方式:基于BOTjar包和1ucene_cnjar包的二次開發(fā),充分利用JAVA網(wǎng)絡(luò)爬蟲的開源代碼,來建立課程資源庫資料搜索和爬取的聚焦爬蟲。
五、結(jié)束語
在互聯(lián)網(wǎng)中進(jìn)行課程相關(guān)資源的搜索與聚焦爬蟲技術(shù)的結(jié)合具有重要意義。將本文提出的方法與課程資源所需內(nèi)容分析相結(jié)合,全面準(zhǔn)確的提取網(wǎng)絡(luò)中課程所需的有關(guān)信息,可提高資源的查準(zhǔn)率和查全率,能夠更有效的促進(jìn)網(wǎng)絡(luò)資源更好的利用,從而可以建設(shè)本科各門專業(yè)課程的課程資源庫,并為高校師生提供良好的信息資源服務(wù)。
參考文獻(xiàn):
(1)對所有不含有要抓取的結(jié)構(gòu)化信息頁面的 URL、又不含有可以集中提取前者 URL 的種子型 URL,都不作處理。
(2)從可以集中提取含結(jié)構(gòu)化信息頁面 URL 的種子型 URL(如地方新聞目錄 URL),提取全部的含結(jié)構(gòu)化信息頁面的 URL(如地方信息列表 URL)。
(3)從含結(jié)構(gòu)化信息頁面的 URL 提取所需的結(jié)構(gòu)化信息,并加以記錄。
3.2.2 擴(kuò)展 Frontierscheduler模塊
FrontierScheduler 是一個 PostProcessor,其作用是將 Extractor所分析得出的鏈接加入到 Frontier 中,以待繼續(xù)處理,聚焦爬蟲實現(xiàn)關(guān)鍵詞對主題的判斷算法就在該模塊中構(gòu)建并執(zhí)行。主題相關(guān)度判斷的關(guān)鍵代碼如下:
public void GetCount(String path,CandidateURI caUri)
{//判斷待抓取網(wǎng)頁與主題是否相關(guān)
try {
String s=sb.getStrings();//s 取網(wǎng)頁正文字符
Len=length(s);//求網(wǎng)頁字符數(shù)
float d=0;//初始化 d,用于計算所有導(dǎo)向詞的權(quán)重和
for(int i=0;i
{count=0,int j=1;//count為導(dǎo)向詞出現(xiàn)次數(shù),j 為導(dǎo)向詞在字符串的位置
t= length(a[i]);//求第 i 個導(dǎo)向詞的字符個數(shù)
While(j
int index=s.indexOf(a[i],j,len);//查找字串在 j+1 到 end 之間第一個字符首次出現(xiàn)的位置
if(index!=-1)//找到后,繼續(xù)在余下的字符串中找
{count++;
j=index+t+1;}
Else
Break;
}
D(i)=count*b(i);//D(i)是第 i 個導(dǎo)向詞的權(quán)重,b(i)表示 i 個導(dǎo)向詞的權(quán)值。
d=d+ D(i);//將所有導(dǎo)向詞的權(quán)重求和
}
k=1/len * 1/100 * d;//k 是網(wǎng)頁主題相關(guān)度,len是文章字符數(shù),100個導(dǎo)向詞
if(k>0.6) ; //相關(guān)度判斷
{System.out.println("count:"+count);//表示輸出
getController().getFrontier().schedule(caUri); //當(dāng)前 url 加入 heritix 采集隊列 }
}
3.3 Heritrix聚焦爬蟲接口的設(shè)計
Heritrix 網(wǎng)絡(luò)爬蟲是一個通用的網(wǎng)頁采集工具,需要對Heritrix 抓取和分析網(wǎng)頁的行為進(jìn)行一定的控制,修改Extractor和 Frontierscheduler模塊后,需要對其各個功能接口進(jìn)行操作調(diào)試,由此保證聚焦爬蟲功能的全面實現(xiàn)。下面即對重要功能接口進(jìn)行必要介紹。
(1)應(yīng)用接口
在設(shè)計聚焦爬蟲時,應(yīng)定制一個應(yīng)用接口模塊以供用戶使用,具體將負(fù)責(zé)與Heritrix 軟件關(guān)聯(lián),以提供啟、停爬蟲、獲取網(wǎng)址、采集關(guān)鍵詞等功能實現(xiàn)。
(2)數(shù)據(jù)庫查詢和修改接口
在設(shè)計聚焦爬蟲時,應(yīng)設(shè)計相應(yīng)的數(shù)據(jù)庫接口,負(fù)責(zé)下載并發(fā)現(xiàn)與主題相關(guān)的網(wǎng)頁信息、再保存到數(shù)據(jù)庫的表中。存儲的字段包括:網(wǎng)頁URL,本地存儲相對路徑,下載時間,HTTP頭中抽取的網(wǎng)頁編碼,關(guān)鍵詞id等。
(3)去重接口
因為Heritrix對相同的URL不進(jìn)行替換,爬蟲工作時會下載大量重復(fù)的網(wǎng)頁,為了節(jié)省空間、并獲取準(zhǔn)確的采集結(jié)果,就必須按照設(shè)定規(guī)則對重復(fù)下載的網(wǎng)頁進(jìn)行刪除。
4 結(jié)束語
通過以上對開源Heritrix軟件的改進(jìn),聚焦爬蟲已能根據(jù)預(yù)設(shè)的關(guān)鍵詞進(jìn)行網(wǎng)站抓取,并按照算法判斷,當(dāng)網(wǎng)頁的主題相關(guān)度閾值大于0.6時,即聚焦爬蟲下載網(wǎng)頁,至此爬蟲實現(xiàn)了指定網(wǎng)站的主題搜索。綜上可見,可以改進(jìn)開源網(wǎng)絡(luò)爬蟲并使其在垂直搜索引擎中獲得成功立項使用。
參考文獻(xiàn):
[1]劉運強(qiáng). 垂直搜索引擎的研究與設(shè)計[J]. 計算機(jī)應(yīng)用與軟件,2010, 127(7): 130-132.
[2]劉偉光. 一種基于改進(jìn)向量空間模型的藏文主題網(wǎng)頁采集方法[J]. 圖書館學(xué)研究,2014, 16:55-62.
[3]陳歡. 面向垂直搜索引擎的聚焦網(wǎng)絡(luò)爬蟲關(guān)鍵技術(shù)研究與實現(xiàn)[D]. 華中師范大學(xué), 2014.