2、進(jìn)化
早期我們和競爭對手打的時候,雙方的技術(shù)都比較初級。后來慢慢的,爬蟲在升級,反爬蟲也在升級。這個我們稱為“進(jìn)化”。我們曾經(jīng)給對方放過水,來試圖拖慢他們的進(jìn)化速度。然而,效果不是特別理想。爬蟲是否進(jìn)化,取決于爬蟲工程師自己的KPI,而不是反爬蟲的進(jìn)化速度。
后期打到白熱化的時候,用的技術(shù)越來越匪夷所思。舉個例子,很多人會提,做反爬蟲會用到canvas指紋,并認(rèn)為是最高境界。其實這個東西對于反爬蟲來說也只是個輔助,canvas指紋的含義是,因為不同硬件對canvas支持不同,因此你只要畫一個很復(fù)雜的canvas,那么得出的image,總是存在像素級別的誤差??紤]到爬蟲代碼都是統(tǒng)一的,就算起selenium,也是ghost的,因此指紋一般都是一致的,因此繞過幾率非常低。
但是!這個東西天生有兩個缺陷。第一是,無法驗證合法性。當(dāng)然了,你可以用非對稱加密來保證合法,但是這個并不靠譜。其次,canvas的沖突概率非常高,遠(yuǎn)遠(yuǎn)不是作者宣稱的那樣,沖突率極低。也許在國外沖突是比較低,因為國外的語言比較多。但是國內(nèi)公司通常是IT統(tǒng)一裝機(jī),無論是軟件還是硬件都驚人的一致。我們測試canvas指紋的時候,在攜程內(nèi)部隨便找了20多臺機(jī)器,得出的指紋都完全一樣,一丁點差別都沒有。因此,有些“高級技巧”其實一點都不實用。
3、法律途徑
此外就是大家可能都考慮過的:爬蟲違法嗎?能起訴對方讓對方不爬嗎?法務(wù)給的答案到是很干脆,可以,前提是證據(jù)。遺憾的是,這個世界上大部分的爬蟲爬取數(shù)據(jù)是不會公布到自己網(wǎng)站的,只是用于自己的數(shù)據(jù)分析。因此,即使有一些關(guān)于爬蟲的官司做為先例,并且已經(jīng)打完了,依然對我們沒有任何幫助。反爬蟲,在對方足夠低調(diào)的情況下,注定還是個技術(shù)活。
4、搞事情,立Flag
到了后來,我們已經(jīng)不再局限于打打技術(shù)了。反爬蟲的代碼里我們經(jīng)常埋點小彩蛋給對方,比如寫點注釋給對方。雙方通過互相交戰(zhàn),頻繁發(fā)布,居然聊的挺high的。
比如問問對方,北京房價是不是很高啊?對方回應(yīng),歐巴,我可是憑本事吃飯哦。繼續(xù)問,搖到號了嗎?諸如此類等等。這樣的事情你來我往的,很容易動搖對方的軍心,還是很有作用的。試想一下,如果你的爬蟲工程師在大年三十還苦逼加班的時候,看到對方留言說自己拿到了n個月的年終獎,你覺得你的工程師,離辭職還遠(yuǎn)嗎?
最后,我們終于搞出了大動作,覺得一定可以坑對方很久了。我們還特意去一家小火鍋店吃了一頓,慶祝一下,準(zhǔn)備明天上線。大家都知道,一般立flag的下場都比較慘的。兩個小時的自助火鍋,我們剛吃五分鐘,就得到了我們投資競爭對手的消息。后面的一個多小時,團(tuán)隊氣氛都很尷尬,誰也說不出什么話。我們組有個實習(xí)生,后來鼓足勇氣問了我一個問題:
“我還能留下來嗎?”
畢竟,大部分情況下,技術(shù)還是要屈服于資本的力量。
四、爬蟲反爬蟲的未來
與競爭對手和解之后,我們?nèi)グ菰L對方,大家坐在了一起。之前網(wǎng)上自稱妹子的,一個個都是五大三粗的漢子,這讓我們相當(dāng)絕望,在場唯一的一個妹子還是我們自己帶過去的(就是上面提到的實習(xí)生),感覺套路了這么久,最終還是被對方套路了。
好在,吃的喝的都很好,大家玩的還是比較high的。后續(xù)就是和平年代啦,大家不打仗了,反爬蟲的邏輯扔在那做個防御,然后就開放白名單允許對方爬取了。群里經(jīng)常叫的就是:xxx你怎么頻率這么高,xxx你為什么這個接口沒給我開放,為什么我爬的東西不對我靠你是不是把我封了啊。諸如此類的。
和平年代的反爬蟲比戰(zhàn)爭年代還難做。因為戰(zhàn)爭年代,誤傷率只要不是太高,公司就可以接受。和平年代大家不能搞事情,誤傷率稍稍多一點,就會有人叫:好好的不賺錢,瞎搞什么搞。此外,戰(zhàn)爭年代只要不攔截用戶,就不算誤傷。和平年代還要考慮白名單,攔截了合作伙伴也是誤傷。因此各方面會更保守一些。不過,總體來說還是和平年代比較happy。畢竟,誰會喜歡沒事加班玩呢。
然而和平持續(xù)的不是很久,很快就有了新的競爭對手選擇爬蟲來與我們打。畢竟,這是一個利益驅(qū)使的世界。只要有大量的利潤,資本家就會殺人放火,這不是我們這些技術(shù)人員可以決定的。我們希望天下無蟲,但是我們又有什么權(quán)利呢。