爬蟲是構(gòu)建大數(shù)據(jù)平臺的基礎(chǔ)。它負(fù)責(zé)抓取網(wǎng)頁信息,對網(wǎng)頁進(jìn)行識別、分類和過濾。我們熟悉的電子商務(wù)、搜索、新聞以及各大門戶網(wǎng)站,每天都有強(qiáng)大的爬蟲集群在高負(fù)載下運(yùn)行。他們“和諧”地聚集在一起,從新聞和新聞中學(xué)習(xí)。他們盡最大努力搜索和優(yōu)化網(wǎng)絡(luò)信息,各大研究機(jī)構(gòu)盡最大努力建立數(shù)據(jù)集。
然而,各大網(wǎng)站都不給爬行者喘息的機(jī)會,讓他們?yōu)樗麨椤.吘箖?nèi)容的價(jià)值在任何時候都是顯而易見的,所以爬行者和反爬行者之間有混戰(zhàn)。
在與爬行者對爬行者的攻防戰(zhàn)中,沒有一刻可以放松。為了制定反爬行網(wǎng)站的反爬行策略,你必須根據(jù)爬蟲的特點(diǎn)選擇一個計(jì)劃。爬蟲的特點(diǎn)是什么?腳本+自動化。因此,反對攀登的破壞性動作不超過兩種:
首先,非腳本訪問=》瀏覽器真實(shí)性檢測。
第二,非自動訪問=>訪問用戶的真實(shí)性檢測。
由于其運(yùn)行環(huán)境和工作原理,瀏覽器會帶來一些獨(dú)特的屬性:有協(xié)議協(xié)商頭和可執(zhí)行的JavaScript代碼段。然后基于瀏覽器的真實(shí)性檢測,構(gòu)建了第一個抵抗爬行者的堡壘。
反爬蟲黨在活動之初就率先提供了用戶代理、內(nèi)容類型、應(yīng)用程序、我接受編碼、接受語言、x-forward-for、referer等頭格。第一批標(biāo)題與普通瀏覽器不同的爬蟲一個接一個地被觸發(fā),瞬間死亡。然而,這種爬行動物并不是吃素的。他們用一個巧妙的詭計(jì)來逃避真相,并通過鍛造計(jì)價(jià)器頭迅速突破了防線。
反爬蟲一點(diǎn)也不驚慌,在html中添加了一個JavaScript腳本。因?yàn)樗臑g覽器提前知道地雷的位置,所以可以安全地繞過它,而不影響正常的網(wǎng)頁顯示。然而,爬行者并不知道,一個接一個地被抓,被打死或受傷。直到大殺手Node.js出現(xiàn)之前,JavaScript都可以直接執(zhí)行。爬行者終于反擊了,又贏了一場勝利。
反爬行者沒有考慮其他問題,他們用迷宮般的“單頁應(yīng)用程序”防御了他們的堡壘。然而,由于單頁面應(yīng)用的巧妙結(jié)構(gòu),爬蟲使出了渾身解數(shù),卻無法分析出任何數(shù)據(jù),一籌莫展。單頁應(yīng)用程序在戰(zhàn)場上占據(jù)主導(dǎo)地位。反登山者開始了一場片面的屠殺,爬蟲的士氣被摧毀了。
終于,這場戰(zhàn)斗的終結(jié)者出現(xiàn)了。他是無頭鉻技術(shù)。新技術(shù)一出現(xiàn),爬蟲軍的武庫就煥然一新:硒元素、傀儡大師、幻影JS、卡斯珀JS等重型攻城殺手不斷取得成績,反爬行者則是拒人于千里之外。爬蟲軍終于在第一場戰(zhàn)役中取得了勝利。
得益于無頭Chrome的出現(xiàn),反爬蟲在瀏覽器識別戰(zhàn)中立于不敗之地。但勝敗乃兵家常事。東方不亮西方亮。在數(shù)據(jù)防御的關(guān)鍵時刻,防爬蟲意外地發(fā)現(xiàn)了一個現(xiàn)象。雖然瀏覽器很難識別,但人性是貪婪的。人類可以做很多腳本做不到的事情。即使是人的行為也有固定的規(guī)則。就這樣,反爬隊(duì)員們苦干了很久,終于再次踏上了戰(zhàn)場。
第一道防線直接指向爬蟲的關(guān)鍵——貪婪(訪問頻率)。這種每秒10次的高頻訪問請求怎么會發(fā)生在一個人身上呢?爬蟲們不得不大幅度降低攻擊頻率,反爬蟲們終于松了一口氣。
第二道防線的目標(biāo)是爬蟲的痛點(diǎn)-懶惰(固定IP)。最近,同一個IP發(fā)出了數(shù)百個請求,因?yàn)槿绱耍老x必須付出巨大的代價(jià)來購買代理IP。即便如此,反爬蟲仍然可以通過阻止公共IP地址來關(guān)閉大量的代理IP地址。經(jīng)過反爬隊(duì)的精心操作,敵人的攻勢逐漸有效地被削弱了。