SuperSpider——打造功能強大的爬蟲利器

SuperSpider——打造功能強大的爬蟲利器

 

1.爬蟲的介紹

javascript

圖1-1  爬蟲(spider)php

      
      網絡爬蟲(web spider)是一個自動的經過網絡抓取互聯網 上的網頁的程序,在當今互聯網 中獲得愈來愈普遍的使用。這種技術通常用來爬取網頁中連接,資源等,固然,更爲高級的技術是把網頁中的相關數據保存下來,成爲搜索引擎 ,例如著名的google和百度 。常見的爬蟲應用還有像一淘這樣的比價網站,電影推薦網站等。

css

      爲了讓你們進一步感覺到爬蟲的魅力,筆者編寫了一個爬取淘寶 和京東數據的比價網站(http://jiafei.org:8888/),如圖1-2所示。因爲淘寶 和京東的搜索結果頁面中有部份內容引(如價格)是經過ajax動態得到的,再用javascript把內容寫入到相應的標籤中的,當搜索iphone 5s時,後臺爬蟲利用webkit生成去最終的dom樹,爬取有用的數據,通過簡單的處理後返回相應的結果。

html

 

圖1-2  一個簡單的比較網站java

 

2.爲什麼須要爬蟲

web

      爬蟲對於掃描器來講相當重要,站在整個掃描器的最前線(如圖2-1所示)。在一個專業掃描器中,通常首先會由爬蟲爬取指定的頁面,接着把爬到的url傳遞 給調度server,最後由調度server分發須要掃描的url給掃描agent來完成整個掃描過程。ajax

 

圖2-1  掃描器的組成算法

 

2.爬蟲的架構與分析chrome

 
      web安全對於互聯網 公司來講相當重要,爲了瀏覽器

 

此文來自: 馬開東博客 轉載請註明出處 網址: http://www.makaidong.com

讓 公司的掃描器與業界的掃描器看齊,server安全組自研了一款功能強大的爬蟲——superspider,主要用來爲漏洞掃描提供豐富的urls。 superspider的架構如圖3-1所示,首先由下載器模塊下載指定的頁面,分析頁面模塊分析完成後一方面把須要的數據傳遞給存儲模塊,另外一方面將爬 取的urls傳遞給去重模塊,去重後放到url隊列中,最後由調度器安排次序傳遞url給下載器下載新的頁面。接下來詳細講講分析頁面,調度器和去重這3 個模塊。

 

 

圖3-1  爬蟲的架構

 

3.1分析頁面


簡單的來講, 爬蟲主要做用就是用來分析頁面。

難點:由於如今是web2.0時代,絕大部分網頁都會使用javascript處理頁面,並且不少網頁內容都是經過ajax技術加載的。所以,只是簡單地解析html文件會遠遠不夠。

解決:如何作到這點?編寫一個基於webkit的爬蟲superspider。下面將詳細說明superspider所具備的5個功能強大的爬取能力。

a.  靜態頁面連接分析


      簡單點來講,就是分析html文檔,例以下圖的一個<a>標籤的超連接,superspider會識別出href中的值爲一個超連接,提取其值html_link.php?id=1。

b.  javascript動態解析


      下圖爲一段javascript代碼,該代碼的目的是在id爲hi的a標籤中提交屬性href。



      
      superspider利用webkit內核執行以上javascript代碼生成出如下html代碼,再經過靜態頁面連接分析獲取js _link.php?id=1&msg=abc這個url。


c.  自動分析表單


      superspider會自動識別出action中的值爲所提交的地址,提取input標籤中的name和value做爲參數,最終生成出 post_link.php?id=1&msg=abc 這個url。

 

 


d.  自動交互

      自動交換就是說要模仿出人的行爲,

 

此文來自: 馬開東博客 轉載請註明出處 網址: http://www.makaidong.com

例如點擊鼠標,按下回車鍵等,下圖就是一個須要點擊鼠標的例子。

 


      superspider會自動識別出onclick是一個交換行爲,從而執行裏面的js 代碼生成出如下html,從而爬到了 click_link.php?id=1 這個url。

 

e.  hook全部的網絡請求

      這是一個ajax請求,有別於以上4種基於dom樹解析的分析技術,要捉到其請求的url只能經過hook請求,而webkit文檔中並無提到hook 網絡請求的方法。因而經過修改webkit代碼hook住每個由webkit發送出去的請求,從而拿到了 ajax_link.php?id=1&t=1這個url。

 


3.2調度器


      superspider的調度器使用廣度優先搜索策 略,具體的邏輯以下圖所示。首先,從入口頁面1.html中爬到了2.html, 3.html和4.html,依次把它們放到url隊列中。接着取出2.html,把爬到的5.html和6.html放到url隊列中,隨後便開始爬取 3.html,依廣度次序進行。

圖3-2-1  爬蟲調度的廣度優先搜索策略


3.3去重

      爲了掃描的質量和效率,須要進行去重。例如大部分網站中日期做爲其url的組成部分,尤爲是門戶網站。superspider使用將數字替換成d+的算法對url進行去重。例如,

1.http://video.sina.com.cn/ent/s/h/2010-01-10/163961994.shtml?a=1&b=10

2.http://video.sina.com.cn/ent/s/h/2009-12-10/16334456.shtml?a=12&b=67

對數字進行模式處理爲:

http://video.sina.com.cn/ent/s/h/d+-d+-d+/d+.shtml?a=d+&b=d+

若是連接1已經爬取過,連接2與連接1相似, 不重複爬取。

試驗證實這種方法簡捷高效,漏爬率極低,大大提高掃描器的效率。

 

4.爬蟲的具體實現


a.webkit的易用性


      經常使用的chrome, safari等瀏覽器都是基於webkit內核,不過提起這個內核,你們可能會以爲有點龐大艱深。但若是隻是對於應用層面來講,webkit使用起來仍是 挺簡易的。如圖4-1所示,只需14行即可以寫出一個瀏覽器。

圖4-1  使用webkit編寫的瀏覽器

b.難點解決


問題:webkit須要視窗系統才能正常啓動,而服務器通常都沒有視窗系統的,那麼如何在後臺穩定地運行webkit?以前是去掉webkit中的圖形渲染,css等與gui有關的代碼,太麻煩,易出衆多bug。


解決:使用xvfb虛擬出一個視窗系統,只需把alert, confirm, prompt的代碼註釋掉(由於會讓瀏覽器卡住),簡單快捷穩定。


c.爬蟲的邏輯代碼


圖4-2爲爬蟲的邏輯代碼,在parse函數裏利用webkit生成出來的dom樹來作具體的第三部分所提到的分析邏輯。

圖4-2  爬蟲的邏輯代碼



5.效果

      superspider與wvs的爬蟲對比,在著名的爬蟲測試 平臺http://demo.aisec.cn/demo/進行測試,該平臺要求爬蟲要徹底具有3.1所提到的5個功能才能爬取到全部的url,上圖爲掃 描器的爬蟲,下圖爲wvs的爬蟲, 其中click_link.php (在3.1.d提到)是須要爬蟲具備自動交換能力才能爬取到的。

結論:superspider所有都能爬到, 在自動交互方面比wvs表現更好

var url = window.location.href;document.write("此文連接:"+url+"

 
");document.write("轉載請註明出處: "+document.title+"");
相關文章
相關標籤/搜索