爬蟲江湖的恩怨情仇

一、爬蟲的發展歷史

網絡爬蟲源於上個世紀90年代的Google等搜索引擎,爬蟲用於抓取互聯網上的Web頁面,再由搜索引擎進行索引和存儲,從而爲我們提供檢索服務。網絡爬蟲位於搜索引擎的後臺,並未直接與用戶接觸,屬於幕後技術,因此在較長的時間內並未被廣大開發人員所關注

現代意義上的搜索引擎的祖先,是1990年由蒙特利爾大學學生Alan Emtage發明的Archie。雖然當時World Wide Web還未出現,但網絡中文件傳輸還是相當頻繁的,而且由於大量的文件散佈在各個分散的FTP主機中,查詢起來非常不便,因此AlanArchie工作原理與現在的搜索引擎已經很接近,它依靠腳本程序自動搜索網上的文件,然後對有關信息進行索引,供使用者以一定的表達式查詢。由於Archie深受用戶歡迎,受其啓發,美國內華達System Computing Services大學於1993年開發了另一個與之非常相似的搜索工具,不過此時的搜索工具除了索引文件外,也已經能檢索網頁了。

由於專門用於檢索信息的“機器人”程序象蜘蛛一樣在網絡間爬來爬去,因此,搜索引擎的“機器人”程序就被稱爲“蜘蛛”程序。世界上第一個用於監測互聯網發展規模的“機器人”程序是Matthew Gray開發的World wide Web Wanderer。剛開始它只用來統計互聯網上的服務器數量,後來則發展爲能夠檢索網站域名。這可能也就是網絡爬蟲這個概念的最早來歷了吧。

1994年7月,Michael Mauldin將John Leavitt的蜘蛛程序接入到其索引程序中,創建了當時著名的搜索引擎Lycos。這應該也算是第一個搜索引擎了。其後無數的搜索引擎促使了爬蟲越寫越複雜,並逐漸向多策略、負載均衡及大規模增量抓取等方向發展。爬蟲的工作成果是的搜索引擎能夠漸叟幾乎全部的萬維網頁,甚至被刪除的網頁也可以通過”網頁快照“的功能訪問。

發展到現今,各大網站、搜索引擎都有了自己的網絡資源採集程序,並進一步發展出”雲採集“的概念。爬蟲是一個實踐性很強的技術活,來看谷歌趨勢中從2004年以來對爬蟲技術的關注度變化,分別是中國、美國及全球趨勢:

中國在2014年前對爬蟲基本沒啥關注,隨着Python的火熱,2014年上升趨勢非常明顯。

美國不愧是互聯網的發源地,可以看出來,對爬蟲的關注度一直都不錯。

全球就不說了,一直挺熱,有點看不懂了。。。

二、爬蟲禮儀

正如愛德華等人所說的:“用於檢索的帶寬不是無限的,也不是免費的;所以,如果引入衡量爬蟲抓取質量或者新鮮度的有效指標的話,不但伸縮性,連有效性都將變得十分必要”(愛德華等人,2001年)。一個爬蟲就必須小心的選擇下一步要訪問什麼頁面。網頁爬蟲的行爲通常是四種策略組合的結果。

  1. 選擇策略,決定所要下載的頁面;
  2. 重新訪問策略,決定什麼時候檢查頁面的更新變化;
  3. 平衡禮貌策略,指出怎樣避免站點超載;
  4. 並行策略,指出怎麼協同達到分佈式抓取的效果。

有一些人認爲網絡爬蟲是一個不太優雅的行業,這種看法是錯誤的。只是被一些低質量個人、小型爬蟲把整個爬蟲環境給破壞了,具體表現在下面幾個方面:

  1. 不遵守Robots協議,連接一個Web服務器之後不檢測虛擬根目錄下是否有Robots.txt文件,也不管文件裏面關於頁面訪問控制列表的規定。大家知道這個協議是一個行業協議,忽視這個協議也就意味着行業沒有了規範。
  2. 爬行策略沒有優化,一般開源系統實現了寬度優先或深度優先的策略,但是並沒有對Web頁面的具體特徵做優化,比如Portal類型頁面超鏈接數量非常多,這些鏈接如果直接進入爬行任務,就很容易對Web服務器造成拒絕服務攻擊。
  3. 3多線程、分佈式的架構,這個看似好的技術,對於網絡爬蟲來說只是一廂情願。客戶端架構設計得再好,爬行策略、增量模式等等沒有做好,就等於製造了很多小爬蟲在服務器上打羣架。因此,這種情況最終導致兩敗俱傷的結局,對Web服務器和爬蟲都不好。

  由於互聯網Web的開放性和匿名性,使得此類爬蟲的行爲就像一些逛商場的人,他們不買東西、不看廣告、只顧抄價格拍照。也像那些迷失在城市交通路上的車子,不斷地重複走着某些路線,不知道怎麼才能到達目的地。最終,必然導致雙方(顧客-商場管理員,司機-交管員)進入明爭暗鬥,並惡化了整個行業。

前段時間臭名昭著的今日頭條爬蟲癱瘓小網站事件,可以看出資本的不擇手段。

三、爬蟲與反爬蟲之間的戰爭

爬蟲目的是自動化的從目標網頁獲取數據,但是這個行爲會對目標站點造成一定壓力,對方出於對站點性能或數據的保護,一般都會有反爬手段。所以在開發爬蟲過程中需要考慮反反爬。

爬蟲開發過程中常見分佈式(代理IP)、異步數據解析(內置瀏覽器內核)、光學圖片識別、模擬驗證(模擬請求Header、User-Agent、Token)等手段。網絡爬蟲會爲Web服務器帶來巨大的資源開銷,當我們編寫的爬蟲數據不能給我們帶來價值時,我們應停止沒必要的網絡請求來給互聯網減少干擾。

站點反爬一般會考慮後臺對訪問進行統計,對單個IP,Session、單種User-Agent訪問超過閾值或 Referer缺失的請求進行封鎖,Robots協議,異步數據加載,頁面動態化,請求驗證攔截等。高端的反反爬包括混淆、不穩定代碼、給假數據(投毒)、行爲分析、假鏈陷阱、字符轉圖片等。一般反爬蟲策略多數用在比較低級的爬蟲上,這類爬蟲多爲簡單粗暴的不顧服務器壓力不停訪問,再一種爲失控的或被人遺忘的爬蟲,這類爬蟲一般需要在第一時間封鎖掉。

鑑於爬蟲爬取的數據爲目標網站發佈於互聯網的公開數據,所以理論上是不可能完全阻止掉爬蟲的。站點能做的只是增加爬蟲的爬取難度,讓爬蟲的開發成本增高從而知難而退。越是高級的爬蟲,越難被封鎖,相應高級爬蟲的開發成本也越高。在對高級爬蟲進行封鎖時,如果成本高到一定程度,並且爬蟲不會給自己帶來大的性能壓力和數據威脅時,這時就無需繼續提升成本和爬蟲對抗了。目前大多熱門站點在與爬蟲的博弈中,多維持着一個爬蟲與反爬蟲的平衡,畢竟雙方都是爲了在商業市場中獲取利益,而不是不計成本的幹掉對方。

甚至有很多時候,兩個公司的員工,工作時間爲了爬蟲和反爬鬥得你死我活,下班後卻一起宵夜,一起探討爬蟲技術。也算是相親相愛一家人了。有這樣一張圖,非常有意思,可以看看:

當然,隨着維權意識的提升,爬蟲入刑的案例也非常多,可以看我前面給大家整理的文章《要過年了,中國爬蟲違法違規案例彙總!不要被錢財矇蔽你的雙眼》 。

四、爬蟲的未來

51信用卡被查,更是將暴力催收背後非法使用爬蟲技術爬取個人隱私數據的醜行,暴露在陽光之下。 

一時間,“爬蟲”成爲衆矢之的,一些公司緊急下架了爬蟲相關的招聘信息,給大數據風控、人工智能從業者帶來些許恐慌,頭髮又多落了幾根。 

傳統網絡爬蟲最大的應用場景是搜索引擎,普通的企業更多是做網站或應用。後來隨着網絡數據分析的需要,以及互聯網上的輿情事件層出不窮,針對網絡爬蟲有了大量的需求,採集的對象主要是些新聞資訊。 

近些年,由於大數據處理和數據挖掘技術的發展,數據資產價值的概念深入人心,爬蟲技術得到更加廣泛和深入的發展,採集對象也更豐富,高性能、併發式的技術指標也更高。 

圍繞網絡爬蟲合法性的討論仍然存在,情況也比較複雜。目前的趨勢下,許多法律問題還處於模糊地帶,往往取決於具體的案例影響。然而,可以肯定的是,只要有互聯網,就會有網絡爬蟲。只有網絡爬蟲讓體量巨大的互聯網變得可以搜索,使爆炸式增長的互聯網變得更加容易訪問和獲取,在可預見的未來,互聯網爬蟲技術將繼續得到發展。 

互聯網作爲人類歷史最大的知識倉庫,是非結構化或非標準化的。互聯網上聚集了大量的文本、圖片、多媒體等數據,內容雖然非常有價值,但是知識提取的難度仍然非常巨大。語義互聯網、知識共享等概念越來越普及,真正語義上的互聯網將是網絡爬蟲的目標。此外,物聯網技術的發展,將是互聯網的升級形式,也將是爬蟲技術未來發展的方向。

以網友的留言結束今天的話題好了:


我的微信公衆號:架構真經(id:gentoo666),分享Java乾貨,高併發編程,熱門技術教程,微服務及分佈式技術,架構設計,區塊鏈技術,人工智能,大數據,Java面試題,以及前沿熱門資訊等。每日更新哦!

參考資料:

  1. https://blog.csdn.net/illidanismine/article/details/70212669
  2. https://new.qq.com/omn/20180328/20180328G1KKCM.html
  3. http://www.sohu.com/a/232316971_100063030
  4. https://blog.csdn.net/yulidrff/article/details/86064469
  5. http://www.01caijing.com/blog/334561.htm
  6. https://www.v2ex.com/t/582295
發佈了263 篇原創文章 · 獲贊 3167 · 訪問量 87萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章