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