網路爬蟲spider

2021-03-04 06:17:51 字數 2959 閱讀 1607

1樓:匿名使用者

「網路蜘蛛」或者說「網路爬蟲」,是一種能訪問**並跟蹤連結的程式,通過它,可快速地畫出一個**所包含的網頁地圖資訊。本文主要講述如何使用java程式設計來構建一個「蜘蛛」,我們會先以一個可複用的蜘蛛類包裝一個基本的「蜘蛛」,並在示例程式中演示如何建立一個特定的「蜘蛛」來掃描相關**並找出死連結。 java語言在此非常適合構建一個「蜘蛛」程式,其內建了對http協議的支援,通過它可以傳輸大部分的網頁資訊;其還內建了一個html解析器,正是這兩個原因使java語言成為本文構建「蜘蛛」程式的首選。

文章後面例1的示例程式,將會掃描一個**,並尋找死連結。使用這個程式時需先輸入一個url並單擊「begin」按鈕,程式開始之後,「begin」按鈕會變成「cancel」按鈕。在程式掃描**期間,會在「cancel」按鈕之下顯示進度,且在檢查當前網頁時,也會顯示相關正常連結與死連結的數目,死連結將顯示在程式底部的滾動文字框中。

單擊「cancel」按鈕會停止掃描過程,之後可以輸入一個新的url;如果期間沒有單擊「cancel」,程式將會一直執行直到查詢完所有網頁,此後,「cancel」按鈕會再次變回「begin」,表示程式已停止。 下面將演示示例程式是如何與可複用「spider」類互動的,示例程式包含在例1的checklinks類中,這個類實現了ispiderreportable介面,如例2所示,正是通過這個介面,蜘蛛類才能與示例程式相互動。在這個介面中,定義了三個方法:

第一個方法是「spiderfoundurl」,它在每次程式定位一個url時被呼叫,如果方法返回true,表示程式應繼續執行下去並找出其中的連結;第二個方法是「spiderurlerror」,它在每次程式檢測url導致錯誤時被呼叫(如「404 頁面未找到」);第三個方法是「spiderfoundemail」,它在每次發現電子郵件地址時被呼叫。有了這三個方法,spider類就能把相關資訊反饋給建立它的程式了。 在begin方法被呼叫後,「蜘蛛」就開始工作了;為允許程式重繪其使用者介面,「蜘蛛」是作為一個單獨的執行緒啟動的。

點選「begin」按鈕會開始這個後臺執行緒,當後臺執行緒執行之後,又會呼叫「checklinks」類的run方法,而run方法是由spider物件例項化時啟動的,如下所示: spider = new spider(this); spider.clear(); base = new url(url.

gettext()); spider.addurl(base); spider.begin(); 首先,一個新的spider物件被例項化,在此,需要傳遞一個「ispiderreportable」物件給spider物件的建構函式,因為「checklinks」類實現了「ispiderreportable」介面,只需簡單地把它作為當前物件(可由關鍵字this表示)傳遞給建構函式即可;其次,在程式中維護了一個其訪問過的url列表,而「clear」方法的呼叫則是為了確保程式開始時url列表為空,程式開始執行之前必須新增一個url到它的待處理列表中,此時使用者輸入的url則是新增到列表中的第一個,程式就由掃描這個網頁開始,並找到與這個起始url相連結的其他頁面;最後,呼叫「begin」方法開始執行「蜘蛛」,這個方法直到「蜘蛛」工作完畢或使用者取消才會返回。

當「蜘蛛」執行時,可以呼叫由「ispiderreportable」介面實現的三個方法來報告程式當前狀態,程式的大部分工作都是由「spiderfoundurl」方法來完成的,當「蜘蛛」發現一個新的url時,它首先檢查其是否有效,如果這個url導致一個錯誤,就會把它當作一個死連結;如果連結有效,就會繼續檢查它是否在一個不同的伺服器上,如果連結在同一伺服器上,「spiderfoundurl」返回true,表示「蜘蛛」應繼續跟蹤這個url並找出其他連結,如果連結在另外的伺服器上,就不會掃描是否還有其他連結,因為這會導致「蜘蛛」不斷地瀏覽inter***,尋找更多、更多的**,所以,示例程式只會查詢使用者指定**上的連結。 構造spider類 前面已經講了如何使用spider類,請看例3中的**。使用spider類及「ispiderreportable」介面能方便地為某一程式新增「蜘蛛」功能,下面繼續講解spider類是怎樣工作的。

spider類必須保持對其訪問過的url的跟蹤,這樣做的目的是為了確保「蜘蛛」不會訪問同一url一次以上;進一步來說,「蜘蛛」必須把url分成三組,第一組儲存在「workloadwaiting」屬性中,包含了一個未處理的url列表,「蜘蛛」要訪問的第一個url也存在其中;第二組儲存在「workloadprocessed」中,它是「蜘蛛」已經處理過且無需再次訪問的url;第三組儲存在「workloaderror」中,包含了發生錯誤的url。 begin方法包含了spider類的主迴圈,其一直重複遍歷「workloadwaiting」,並處理其中的每一個頁面,當然我們也想到了,在這些頁面被處理時,很可能有其他的url新增到「workloadwaiting」中,所以,begin方法一直繼續此過程,直到呼叫spider類的cancel方法,或「workloadwaiting」中已不再剩有url。這個過程如下:

cancel = false; while ( !getworkloadwaiting().isempty() && !

cancel ) 當上述**遍歷「workloadwaiting」時,它把每個需處理的url都傳遞給「processurl」方法,而這個方法才是真正讀取並解析url中html資訊的。 讀取並解析html java同時支援訪問url內容及解析html,而這正是「processurl」方法要做的。在java中讀取url內容相對還比較簡單,下面就是「processurl」方法實現此功能的**:

urlconnection connection = url.openconnection(); if ( (connection.getcontenttype()!

=null) &&!connection.getcontenttype().

tolowercase().startswith("text/") ) { getworkloadwaiting().remove(url); getworkloadprocessed().

add(url); log("not processing because content type is: " + connection.getcontenttype() );

什麼是網路爬蟲網路爬蟲不安全體現在哪些方面

通俗易懂的話就是一隻小蟲子代替人去 的千千萬萬個頁面去收集想要的資料。什麼是網路爬蟲 1 網路爬蟲就是為其提供資訊 的程式,網路爬蟲 又被稱為網頁蜘蛛,網路機器人,在foaf社群中間,更經常被稱為網頁追逐者 是一種按照一定的規則,自動的抓取全球資訊網資訊的程式或者指令碼,已被廣泛應用於網際網路領域。...

python網路爬蟲可以幹啥,Python一般可以用來幹什麼呢?

爬蟲可以抓取網路上的資料啊。爬蟲可以用很多種程式語言實現,python只是一種。所以你想知道的是網路爬蟲可以幹什麼。他比如 交易資料,天氣資料,使用者資料,拿到這些資料之後你就可以做下一步工作了。你去看看這裡就明白了 網路爬蟲可以抓取網上的資料,也就是通過程式去獲取web頁面上自己想要的資料。夢蝶資...

家裡出現很小的爬蟲!求解,家裡出現很小的爬蟲!求解!!!

殺蟲劑可以幫你,再就是多晾晒你的涼蓆 被褥,保持室內乾淨 通風 親,你那個應該是屬於蟑螂吧,親最好去超市買那種蟑螂藥試一試,並且在它進場出入的地方放上蟑螂貼。屋子噴上殺蟲劑試試,先滅了再說 家裡有好多這種小的爬蟲,大家有知道是什麼 鼠婦 溼生蟲 俗稱西瓜 蟲 米湯蟲 潮蟲子 潮蟲 糰子蟲 地蝨婆 地...