《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# 破境之道】
方便各位在有疑問的時候可以及時給我個反饋。同時,也算是給各位志同道合的朋友提供一個交流的平台。
需要源碼的童鞋,也可以在群文件中獲取最新源代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM