1. 程式人生 > >《C# 爬蟲 破境之道》:第二境 爬蟲應用 — 第六節:反爬策略研究

《C# 爬蟲 破境之道》:第二境 爬蟲應用 — 第六節:反爬策略研究

之前的章節也略有提及反爬策略,本節,我們就來系統的對反爬、反反爬的種種,做一個了結。

從防盜鏈說起:

自從論壇興起的時候,網上就有很多人會在論壇裡釋出一些很棒的文章,與當下流行的“點贊”“分享”一樣,很多人都會因為“欣賞”而選擇“轉發”到各大論壇。今時今日,我們大多數人在轉載他人文章時,還會特別註明“轉載自xxx”,可在以前,人們的意識還沒有那麼強,那時,線上播放的視訊資源還是比較少的,轉載的難度不高,手段也比較粗糙,僅憑複製貼上就可以轉載大部分的資源,導致優秀的作品很難找到出處,甚至搜尋引擎前三頁都沒有原創作者及其釋出的論壇的資訊。這就導致原創作者及論壇站長們的極度不滿。很快,站長們就研究出了各種各樣的防盜鏈技術,其中,最常見使用最廣泛的就是圖片資源的防盜鏈技術。

它的實現原理,其實也很簡單,其實就是檢查請求頭(headers)裡的referer欄位的值,來判斷的。這裡對防盜鏈策略的攻防不做過多的闡述,引一篇文章,大家大概瞭解一下原理即可。

由此可以看出,防盜鏈的產生,可以說是最原始的反“扒”策略了,正式拉開“爬”與“反爬”戰爭的序幕。

人,都是自私的:

隨著網際網路日益繁榮,內容、資源也日漸豐富多采,對於那些沒有資源在手的人來說,他們也已經不再滿足於簡單的摘抄了,畢竟手工操作,成本太高、效率太低了,也很難及時發現新鮮熱點資源,但又極度渴望。

於是,面向大眾的草根爬蟲系統誕生了。為什麼要說是“面向大眾”的呢,我這裡想作一個區分,其實,普遍意義上的爬蟲,並不是在這時才誕生的,想想我們之前章節介紹的爬蟲原理,不難猜測出,第一隻爬蟲,很可能就是伴隨著瀏覽器的誕生而誕生的,瀏覽器不就是爬蟲麼!而瀏覽器的誕生,可要早的多的多。然而,全球最大的爬蟲,恐怕要算是搜尋引擎了,也要比這些草根爬蟲出生的更早。

一碗水端不平:

對於大部分資源主,面對大爬蟲“搜尋引擎”是持歡迎的態度的,甚至還絞盡腦汁的優化SEO、提升搜尋排名,生怕被搜尋引擎落下。當然,他們似乎也默契的達成了某種“君子協議”——robots協議,這裡引用百度百科的詞條,有興趣的可以深度瞭解一下:)

但是對於草根爬蟲的姿態可就沒那麼優雅了,想盡辦法,生出各種反爬策略來阻止、阻撓、限制草根爬蟲的肆意生長:(

當然了,這碗水端不平,是完全可以理解的:

對於非資源主來說,他們又非常渴望這些優勢資源,有的是他們沒有能力獲取的,有的是他們沒有權力獲取的,但他們又有著各自的目的,比如:股票分析、科學研究等,沒有資源,就等於沒有根基,而握有資源的資源主,可能又不向這個方向發展,這就更加使得非資源主想要得到如此資源的迫切程度超乎一切;

對於資源主來說,一方面,他們不希望優勢資源被普及,壟斷才是他們的期望,比如,某友圈、某博;另一方面,他們也不得不考慮如果童叟無欺的面向草根爬蟲開發資源,那麼,帶來的(身心及伺服器)壓力都是巨大的,能不能挺得住,尚未可知……

展開博弈:

既然是技術型文章,下面就從技術的角度拉一個表單,列舉出我所能想到的以及常見反爬與反反爬策略:

常見反爬與反反爬策略
反爬策略 反反爬策略
限制、過濾Referer   偽造、清除Referer
Cookies驗證   保留、偽造必要Cookie,刪除非必要Cookie
User-Agent   隨機分配模擬User-Agent
匿名帳戶訪問限制   模擬註冊帳戶、模擬登入,偽造Cookie或Token
限制同一IP的訪問頻率   拉大訪問間隔,降低訪問頻率,使用代理(池)
圖形識別、文字、數字、字母圖片識別驗證碼   手工打碼、打碼平臺、OCR
滑動驗證碼   JS模擬
手機驗證碼   號商
語音驗證碼   號碼識別、語音識別、播放錄音
使用者行為檢測   模擬真實使用者行為軌跡,避免廣度優先,選擇深度優先
介面加密、資料加密、HTTPS   沒有固定策略、通用策略
其他更為複雜的反爬策略   自動化測試方式、指令碼
終極反爬策略   手動採集 T_T

 表格中列出了大部分常見的反爬及反反爬策略。隨著反爬策略的升級,反反爬的難度也是日益提升。

感慨:

從事爬蟲這麼多年,感慨頗多。雙方在這場博弈中,鬥智鬥勇,也是兩敗俱傷,各自徒升成本不說,還勝負難料。

幻想: 

既然資源可以被看得到摸得著,那麼,它就不是保密資源,既然不是保密資源,資源主又何苦死抱著不放。曾幾何時,誰又能想到,軟體專案居然可以開源,時下開源專案如此繁榮,是軟體行業的一大幸事。資源主何時能想明白這件事,就像部落格園如此火爆的社群,每日的更新也不過1~2千,反爬策略再嚴格,魔高一尺、道高一丈,再不濟,多加幾個人,人工採集也可以跟得上。但,這不是科學的發展、人類的進步的體現,這是一個惡性的迴圈。

大膽的幻想一個良性迴圈的圈子,資源主與草根爬蟲也可以搭建一個“君子協議”啊,資源主可以以提供資料介面的方式,將資料開放,草根爬蟲根據協議,獲取所需資料。當然,資源主可以對資料進行付費、免費的劃分,甚至是高價低價的劃分,玩法花樣頗多。這樣,資源主也不必勞心勞神的處處提防,徒增煩惱與成本。草根爬蟲也不必花費高昂的代價去獲取資源。

而且,現在的雲平臺,鼓吹各種服務上雲,是,水龍頭都上雲了,可惜擰開一看,沒水……只有資料上雲,那才能稱得上是真正的雲平臺,才能真正的符合雲平臺的理念,也才能真正的體現雲平臺的價值。

資源主也可以依託雲平臺,將資料服務與主要業務分離,壓力轉移到雲平臺,這樣,也不用擔心草根爬蟲聚集造成的正常業務受到影響了。

對於非資源主來說,無論出於什麼目的,使用什麼手段,獲取他人資料,都會帶來很多成本(開發成本、裝置成本、維護成本)還有可能伴隨著反爬策略升級、資源方間歇性掉線,中間造成資料斷檔,想要實現一個長期穩定的業務線,也是無比困難,苦不堪言。何不直接以此成本,購買一個安心的服務呢。

在資源平等時,想要取勝,拼得就是服務了,而服務的不斷提升,這才是將社會推向新發展的方向:)

 

 

喜歡本系列叢書的朋友,可以點選連結加入QQ交流群(994761602)【C# 破境之道】
方便各位在有疑問的時候可以及時給我個反饋。同時,也算是給各位志同道合的朋友提供一個交流的平臺。
需要原始碼的童鞋,也可以在群檔案中獲取最新原始碼。