安全開發第一講-如何利用java實現web2.0分佈式爬蟲引擎

由於web前端技術的日新月異,傳統爬蟲對頁面的爬取結果愈發不能滿足用戶的需求。對於安全領域來講,如果關注網站安全,那麼獲取頁面的內容信息是第一步需要做的事情,所以開發出一款能夠獲取基於ajax實現的動態頁面的爬蟲是很有必要的。

在寫爬蟲之前,我們首先需要了解爬蟲的原理。對於我們需要獲取頁面內容的目標網站而言,其頁面內容可以看做是從首頁擴展出來的一張圖,而爬蟲要做的事情就是遍歷這一張圖的每個節點,獲取節點的頁面信息。利用數據結構的知識我們知道,只需要利用最簡單的寬度優先算法就可以實現。廣度優先算法的算法原理如下所示:
在這裏插入圖片描述
從頁面1中擴展出子頁面2,3,4,然後分別擴展2,3,4,得到他們自己的子頁面,廣度優先算法就是基於這樣逐層的擴展完成算法流程的。我們可以利用一個隊列來存儲這些節點,隊列先進先出的特性,剛好符合廣度優先算法逐層擴展的算法邏輯。在整個廣度優先遍歷的過程中,需要對已經爬取過的鏈接節點進行標記,避免重複爬取。同時爲了增加爬蟲的執行效率,需要對該算法進行併發上的優化,最簡單的優化方式就是在對每一層的頁面節點進行擴展的採取按層併發執行,具體的實現就是對於每一個頁面節點存儲一個層數信息,當前節點的層數等於父層節點的層數+1,在廣度優先對隊列中的節點進行出隊操作時,一次性將某層的所有節點全部取出來,然後放入到一個執行線程池中,線程池會在全部任務執行完之後返回。同時,可以通過給執行線程池配置不同的線程數,達到控制被爬網站最大併發爬取數的目的。避免因爬蟲造成對方網站的損失。自此,爬蟲調度引擎便實現完成了。下面,我將以Java代碼的方式給大家簡單講解上面的流程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章