說爬蟲和反爬蟲之間的那些事!爬蟲是搭建大數(shù)據(jù)平臺(tái)的基礎(chǔ),負(fù)責(zé)抓取網(wǎng)頁信息,對(duì)網(wǎng)頁進(jìn)行識(shí)別、分類和過濾。我們熟悉的電商、搜索、新聞以及各大門戶網(wǎng)站,每天都有強(qiáng)大的爬蟲集群在高負(fù)荷運(yùn)行。他們“和諧地”互相聚合,從新聞和新聞中學(xué)習(xí)。他們盡最大努力搜索和優(yōu)化網(wǎng)頁信息,各大研究機(jī)構(gòu)盡最大努力構(gòu)建數(shù)據(jù)集。
但是,各大網(wǎng)站不給爬蟲喘息的機(jī)會(huì),讓它為所欲為。畢竟內(nèi)容的價(jià)值在任何時(shí)候都是顯而易見的,所以才有了爬蟲和反爬蟲的混戰(zhàn)大戲。
沒有一刻放松與爬行者對(duì)爬行者的攻防戰(zhàn)。反爬網(wǎng)站要制定反爬策略,就要根據(jù)爬蟲的特點(diǎn)來選擇方案。爬蟲有什么特點(diǎn)?腳本+自動(dòng)化。因此,反對(duì)攀爬的毀滅性舉動(dòng)不超過兩種:
首先,非腳本訪問= >瀏覽器真實(shí)性檢測(cè)。
第二,非自動(dòng)化訪問= >訪問用戶的真實(shí)性檢測(cè)。
由于其運(yùn)行環(huán)境和工作原理,瀏覽器會(huì)帶來一些獨(dú)特的屬性:有協(xié)議協(xié)商的頭,有可執(zhí)行的JavaScript代碼片段。然后基于瀏覽器的真實(shí)性檢測(cè),構(gòu)建防爬黨的第一道堡壘。
反爬蟲黨在競(jìng)選之初,率先提供了user-agent、content-type、application、I accept-encoding、accept-language、x-forwarded-for、referer等頭部電網(wǎng)。第一批不同于正常瀏覽器標(biāo)題的爬蟲相繼觸發(fā),瞬間死亡。然而,這種爬行動(dòng)物不是吃素的!他們用了一招巧妙的瞞天過海的招數(shù),通過偽造表頭迅速突破防線!
反爬者一點(diǎn)也不慌張,在html里加了一個(gè)JavaScript腳本礦。因?yàn)樗臑g覽器提前知道了地雷的位置,所以可以安全繞過,不影響正常的網(wǎng)頁顯示。然而爬行者并不知情,接連被抓,或殺或傷。直到大殺器Node.js出現(xiàn),JavaScript才可以直接執(zhí)行。爬行者終于奮起反擊,再下一城??!
反爬者未能另作打算,用“單頁應(yīng)用”的迷宮防御重鑄堡壘。而爬蟲卻因單頁應(yīng)用的巧妙構(gòu)造,使盡渾身解數(shù)卻分析不出任何數(shù)據(jù),手足無措。單頁應(yīng)用程序主宰了戰(zhàn)場(chǎng)!反攀登者開始了單方面的屠殺,爬行動(dòng)物的士氣被摧毀了…...
終于,這場(chǎng)戰(zhàn)斗的終結(jié)者出現(xiàn)了。他是無頭鉻技術(shù)!新技術(shù)一出現(xiàn),爬蟲軍的兵工廠煥然一新:硒元素、傀儡師、幻影JS、CasperJS等重型攻城殺手不斷建功,反爬者潰千里。爬蟲終于鎖定了首戰(zhàn)的勝利!
由于無頭Chrome的出現(xiàn),反爬者在瀏覽器識(shí)別之戰(zhàn)中所向披靡。但勝敗乃兵家常事,東方不亮西方亮。在數(shù)據(jù)防御的關(guān)鍵時(shí)刻,反爬者意外發(fā)現(xiàn)了一個(gè)現(xiàn)象。雖然瀏覽器很難識(shí)別,但是人性是貪婪的!人類可以做很多腳本做不到的事情!連人的行為都有固定的規(guī)則!就這樣,反攀登者努力了很久,終于再次踏上了戰(zhàn)場(chǎng)!這場(chǎng)戰(zhàn)斗的制高點(diǎn)是靈魂和哲學(xué)的雙層拷問:“你到底是不是人?”
第一道防線直指爬蟲的關(guān)鍵——貪婪(訪問頻率)!這種每秒10次的高頻訪問請(qǐng)求怎么會(huì)發(fā)生在一個(gè)人類身上,剁!爬行者不得不大幅降低攻擊頻率,反爬者終于松了一口氣。
第二道防線直指爬蟲的痛點(diǎn)——懶惰(固定IP)!最近,數(shù)百個(gè)請(qǐng)求從同一個(gè)IP發(fā)出。世界上怎么會(huì)有這么無聊的人?砍!正因如此,爬蟲不得不付出巨大的代價(jià)購買代理ip。即便如此,反爬蟲仍然可以通過屏蔽公網(wǎng)IP的方式關(guān)閉大量代理地址。經(jīng)過反爬黨的精心運(yùn)作,敵人的攻勢(shì)被逐漸有效地削弱了。
就這樣,爬蟲和反爬蟲的斗爭還在繼續(xù),誰也不會(huì)認(rèn)輸。有時(shí)候反爬蟲策略升級(jí),爬蟲策略也會(huì)升級(jí)。