SuperSpider——打造功能強大的爬蟲利器
1.爬蟲的介紹
圖1-1 爬蟲(spider)
網路爬蟲(web spider)是一個自動的通過網路抓取網際網路上的網頁的程式,在當今網際網路中得到越來越廣泛的使用。這種技術一般用來爬取網頁中連結,資源等,當然,更為高階的技術是把網頁中的相關資料儲存下來,成為搜尋引擎,例如著名的google和百度。常見的爬蟲應用還有像一淘這樣的比價網站,電影推薦網站等。
為了讓大家進一步感受到爬蟲的魅力,筆者編寫了一個爬取淘寶和京東資料的比價網站(http://jiafei.org:8888/),如圖1-2所示。由於淘寶和京東的搜尋結果頁面中有部分內容引(如價格)是通過ajax動態獲得的,再用javascript把內容寫入到相應的標籤中的,當搜尋Iphone 5s時,後臺爬蟲利用webkit生成去最終的dom樹,爬取有用的資料,經過簡單的處理後返回相應的結果。
圖1-2 一個簡單的比較網站
2.為何需要爬蟲
爬蟲對於掃描器來說至關重要,站在整個掃描器的最前線(如圖2-1所示)。在一個專業掃描器中,一般首先會由爬蟲爬取指定的頁面,接著把爬到的url傳遞給排程server,最後由排程server分發需要掃描的url給掃描agent來完成整個掃描過程。
圖2-1 掃描器的組成
2.爬蟲的架構與分析
Web安全對於網際網路公司來說至關重要,為了讓公司的掃描器與業界的掃描器看齊,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. 自動互動
自動交換就是說要模仿出人的行為,例如點選滑鼠,按下Enter鍵等,下圖就是一個需要點選滑鼠的例子。
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表現更好
圖4-1 SuperSpider與wvs的結果對比
本文轉自部落格園知識天地的部落格,原文連結:SuperSpider——打造功能強大的爬蟲利器,如需轉載請自行聯絡原博主。
相關文章
- 爬蟲利器 Puppeteer 實戰爬蟲
- scrapy 爬蟲利器初體驗(1)爬蟲
- Python爬蟲更多的功能Python爬蟲
- 大規模非同步新聞爬蟲:實現功能強大、簡潔易用的網址池(URL Pool)非同步爬蟲
- 資訊收集利器|一款功能強大的子域收集工具
- Java爬蟲利器HTML解析工具-JsoupJava爬蟲HTMLJS
- python併發爬蟲利器tomorrow(一)Python爬蟲
- Python2爬蟲利器:requests庫的基本用法Python爬蟲
- Python3爬蟲利器之ChromeDriver的安裝Python爬蟲Chrome
- Python3爬蟲利器:Appium的安裝Python爬蟲APP
- python的爬蟲功能如何實現Python爬蟲
- Python3爬蟲利器:BeautifulSoup4的安裝Python爬蟲
- 爬蟲利器Pyppeteer的介紹和使用 爬取京東商城書籍資訊爬蟲
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- 鄙視那些把爬蟲當作AI的SB,清華學霸尹成大哥的歷史上最強大的爬蟲視訊爬蟲AI
- 2個月精通Python爬蟲——3大爬蟲框架+6場實戰+反爬蟲技巧+分散式爬蟲Python爬蟲框架分散式
- 爬蟲框架的功能組成是什麼爬蟲框架
- 想做個防爬蟲的功能怎麼做爬蟲
- 如何有效防爬蟲?教你打造安全堡壘爬蟲
- 爬蟲分析利器:谷歌Chrome F12抓包分析爬蟲谷歌Chrome
- ajax+php實現爬蟲功能PHP爬蟲
- 爬蟲代理IP的三大作用爬蟲
- 大話爬蟲的基本套路薦爬蟲
- 網路爬蟲三大特性爬蟲
- 「玩轉Python」打造十萬博文爬蟲篇Python爬蟲
- Python 實戰:用 Scrapyd 打造爬蟲控制檯Python爬蟲
- 使用Go語言實現爬蟲功能Go爬蟲
- 華為分析服務功能再次升級:打造你的應用“最強大腦”!
- 爬蟲:多程式爬蟲爬蟲
- 程式碼生成利器:IDEA 強大的 Live TemplatesIdea
- .NET使用分散式網路爬蟲框架DotnetSpider快速開發爬蟲功能分散式爬蟲框架IDE
- Chrome的強大搜尋功能Chrome
- 打造高效的分散式爬蟲系統:利用Scrapy框架實現分散式爬蟲框架
- 大規模非同步新聞爬蟲:簡單的百度新聞爬蟲非同步爬蟲
- 爬蟲在大資料時代的應用爬蟲大資料
- 通用爬蟲與聚焦爬蟲爬蟲
- 爬蟲--Scrapy簡易爬蟲爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站