天天看點

爬蟲江湖的恩怨情仇

一、爬蟲的發展曆史

網絡爬蟲源于上個世紀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信用卡​​​被查,更是将暴力催收背後非法使用爬蟲技術爬取個人隐私資料的醜行,暴露在陽光之下。 

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

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

近些年,由于大資料處理和資料挖掘技術的發展,資料資産價值的概念深入人心,爬蟲技術得到更加廣泛和深入的發展,采集對象也更豐富,高性能、并發式的技術名額也更高。 

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

網際網路作為人類曆史最大的知識倉庫,是非結構化或非标準化的。網際網路上聚集了大量的文本、圖檔、多媒體等資料,内容雖然非常有價值,但是知識提取的難度仍然非常巨大。語義網際網路、知識共享等概念越來越普及,真正語義上的網際網路将是網絡爬蟲的目标。此外,物聯網技術的發展,将是網際網路的更新形式,也将是爬蟲技術未來發展的方向。

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

爬蟲江湖的恩怨情仇
  1. ​​​​https://new.qq.com/omn/20180328/20180328G1KKCM.html​​
  2. ​​http://www.sohu.com/a/232316971_100063030​​
  3. ​​http://www.01caijing.com/blog/334561.htm​​
  4. ​​https://www.v2ex.com/t/582295​​

繼續閱讀