
IP
網(wǎng)站檢測(cè)網(wǎng)絡(luò)抓取活動(dòng)的最簡(jiǎn)單方法之一是通過(guò)IP跟蹤。該網(wǎng)站可以根據(jù)其行為識(shí)別IP是否是機(jī)器人。當(dāng)網(wǎng)站發(fā)現(xiàn)定期 或在 短時(shí)間內(nèi) 從單個(gè) IP地址 發(fā)送了 大量請(qǐng)求 時(shí), 很有可能該IP被阻止,因?yàn)樗粦岩墒菣C(jī)器人。在這種情況下,構(gòu)建一個(gè)防爬蟲(chóng)真正重要的是 每單位時(shí)間的訪問(wèn)次數(shù) 和 訪問(wèn)頻率。這是您可能會(huì)遇到的一些情況。
方案1:幾秒鐘內(nèi)進(jìn)行多次訪問(wèn)。真正的人無(wú)法快速瀏覽。因此,如果您的搜尋器頻繁向網(wǎng)站發(fā)送請(qǐng)求,則該網(wǎng)站肯定會(huì)阻止將該IP識(shí)別為機(jī)器人的IP。
解決方案:降低爬蟲(chóng)速度。在執(zhí)行或增加兩個(gè)步驟之間的等待時(shí)間之前設(shè)置延遲時(shí)間(例如“睡眠”功能)將始終有效。
方案2:以完全相同的速度訪問(wèn)網(wǎng)站。真實(shí)的人類(lèi)不會(huì)一遍又一遍地重復(fù)相同的行為模式。一些網(wǎng)站會(huì)監(jiān)視請(qǐng)求的頻率,如果以完全相同的模式(例如每秒一次)定期發(fā)送請(qǐng)求,則很可能會(huì)激活防抓取機(jī)制。
解決方案:為搜尋器的每個(gè)步驟設(shè)置隨機(jī)延遲時(shí)間。以隨機(jī)的抓取速度,爬蟲(chóng)的行為將更像人類(lèi)瀏覽網(wǎng)站的方式。
方案3:某些高級(jí)防爬技術(shù)將采用復(fù)雜的算法來(lái)跟蹤來(lái)自不同IP的請(qǐng)求并分析其平均請(qǐng)求。如果IP的請(qǐng)求異常,例如每天發(fā)送相同數(shù)量的請(qǐng)求或在同一時(shí)間訪問(wèn)相同的網(wǎng)站,則會(huì)被阻止。
解決方案:定期更改您的IP。大多數(shù)VPN服務(wù),云服務(wù)器和代理服務(wù)都可以提供輪換IP。通過(guò)這些旋轉(zhuǎn)的IP發(fā)送請(qǐng)求時(shí),爬網(wǎng)程序的行為不像漫游器,這可以減少被阻止的風(fēng)險(xiǎn)。
登錄
許多網(wǎng)站,尤其是諸如Twitter和Facebook之類(lèi)的社交媒體平臺(tái),僅在您登錄網(wǎng)站后才向您顯示信息。為了對(duì)此類(lèi)站點(diǎn)進(jìn)行爬網(wǎng),爬網(wǎng)程序還需要模擬日志記錄步驟。
登錄網(wǎng)站后,搜尋器需要保存cookie。Cookie是一小段數(shù)據(jù),用于存儲(chǔ)用戶(hù)的瀏覽數(shù)據(jù)。如果沒(méi)有Cookie,該網(wǎng)站會(huì)忘記您已經(jīng)登錄,并要求您再次登錄。
此外,某些具有嚴(yán)格抓取機(jī)制的網(wǎng)站可能僅允許部分訪問(wèn)數(shù)據(jù),例如即使登錄后每天也有1000行數(shù)據(jù)。
您的漫游器需要知道如何登錄
1)模擬鍵盤(pán)和鼠標(biāo)操作。搜尋器應(yīng)模擬登錄過(guò)程,其中包括使用鼠標(biāo)單擊文本框和“登錄”按鈕,或使用鍵盤(pán)輸入帳戶(hù)和密碼信息的步驟。
2)首先登錄,然后保存 cookie。對(duì)于允許cookie的網(wǎng)站,他們會(huì)通過(guò)保存cookie來(lái)記住用戶(hù)。有了這些Cookie,您無(wú)需在短期內(nèi)再次登錄該網(wǎng)站。由于采用了這種機(jī)制,您的搜尋器可以避免繁瑣的登錄步驟,并且無(wú)需收集所需的信息。
3)不幸的是,如果遇到上述嚴(yán)格的轉(zhuǎn)義機(jī)制,則可以安排抓取工具以固定頻率(例如每天一次)來(lái)監(jiān)視網(wǎng)站。計(jì)劃搜尋器在一段時(shí)間內(nèi)抓取最新的1000行數(shù)據(jù)并累積最新的數(shù)據(jù)。
UA
UA代表的是User-Agent,它是網(wǎng)站的標(biāo)頭,用于識(shí)別用戶(hù)的訪問(wèn)方式。它包含諸如操作系統(tǒng)及其版本,CPU類(lèi)型,瀏覽器及其版本,瀏覽器語(yǔ)言,瀏覽器插件等信息。
UA示例:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_7_0)AppleWebKit / 535.11(KHTML,例如Gecko)Chrome / 17.0.963.56 Safari / 535.11
抓取網(wǎng)站時(shí),如果您的搜尋器不包含標(biāo)題,則只會(huì)將其自身標(biāo)識(shí)為腳本(例如,如果使用python來(lái)構(gòu)建搜尋器,則它將自身聲明為python腳本)。網(wǎng)站肯定會(huì)阻止腳本發(fā)出的請(qǐng)求。在這種情況下,搜尋器必須偽裝成帶有UA標(biāo)頭的瀏覽器,以便網(wǎng)站可以為其提供訪問(wèn)權(quán)限。
有時(shí),即使您輸入具有相同URL的網(wǎng)站,網(wǎng)站也會(huì)向不同的瀏覽器或不同的版本顯示不同的頁(yè)面或信息。機(jī)會(huì)是與一個(gè)瀏覽器兼容而其他瀏覽器被阻止的信息。因此,為了確保您可以進(jìn)入正確的頁(yè)面,將需要多個(gè)瀏覽器和版本。
在不同的UA之間切換以避免被阻止
更改UA信息,直到找到正確的信息。如果長(zhǎng)時(shí)間使用相同的UA,則應(yīng)用了復(fù)雜的防爬網(wǎng)技術(shù)的某些敏感網(wǎng)站甚至可能阻止訪問(wèn)。在這種情況下,您需要定期更改UA信息。
5.AJAX
如今,更多的網(wǎng)站是使用AJAX開(kāi)發(fā)的,而不是傳統(tǒng)的Web開(kāi)發(fā)技術(shù)。AJAX代表異步JavaScript和XML,這是一種異步更新網(wǎng)站的技術(shù)。簡(jiǎn)而言之,當(dāng)頁(yè)面內(nèi)僅進(jìn)行少量更改時(shí),無(wú)需重新加載整個(gè)網(wǎng)站。
那么您怎么知道一個(gè)網(wǎng)站是否適用AJAX?
沒(méi)有AJAX的網(wǎng)站:即使您僅在網(wǎng)站上進(jìn)行了很小的更改,整個(gè)頁(yè)面也會(huì)被刷新。通常,會(huì)出現(xiàn)加載符號(hào),并且URL會(huì)更改。對(duì)于這些網(wǎng)站,我們可以利用該機(jī)制并嘗試找到URL更改方式的模式。然后,您可以批量生成URL,并直接通過(guò)這些URL提取信息,而不必教您的爬蟲(chóng)如何導(dǎo)航類(lèi)似人類(lèi)的網(wǎng)站。
帶有AJAX的網(wǎng)站:僅更改您單擊的位置,并且不會(huì)出現(xiàn)加載標(biāo)志。通常,Web URL不會(huì)更改,因此搜尋器必須以直接的方式進(jìn)行處理。
對(duì)于AJAX開(kāi)發(fā)的某些復(fù)雜網(wǎng)站,將需要特殊的技術(shù)來(lái)找出那些網(wǎng)站上獨(dú)特的加密方式并提取加密數(shù)據(jù)。解決此問(wèn)題可能很耗時(shí),因?yàn)榧用艿姆绞皆诓煌捻?yè)面上會(huì)有所不同。如果您可以找到帶有內(nèi)置JS操作的瀏覽器,那么它可以自動(dòng)解密網(wǎng)站并提取數(shù)據(jù)。

說(shuō)下我以前爬某電影評(píng)分網(wǎng)站時(shí)遇到的反爬機(jī)制吧,感覺(jué)還挺有趣的。
爬數(shù)據(jù)時(shí)遇到的問(wèn)題
首先來(lái)說(shuō)說(shuō)我在爬數(shù)據(jù)時(shí)遇到的問(wèn)題,看圖:
頁(yè)面上正確顯示了評(píng)分為9.5,按F12打開(kāi)調(diào)試模式,找到該元素節(jié)點(diǎn)時(shí)發(fā)現(xiàn)顯示的是兩個(gè)框框,再打開(kāi)源碼發(fā)現(xiàn)是一串亂碼。
頁(yè)面數(shù)字顯示正常,在源碼中卻顯示亂碼,可以肯定該網(wǎng)站肯定采取了反爬蟲(chóng)機(jī)制,有點(diǎn)意思!
反爬蟲(chóng)機(jī)制原理
下面分析一下這個(gè)反爬蟲(chóng)機(jī)制的原理。
做過(guò)web前端開(kāi)發(fā)的人知道顯示框框一般都是由于引用了字體文件引起,那么這個(gè)網(wǎng)站反爬蟲(chóng)機(jī)制會(huì)不會(huì)跟字體文件有關(guān)呢?
刷新一下頁(yè)面,發(fā)現(xiàn)一個(gè)字體文件的請(qǐng)求:
我們手動(dòng)將這個(gè)字體文件下載下來(lái),使用字體編輯工具打開(kāi):
雖然我不是太懂字體文件的原理,但是按我的理解其實(shí)就是一個(gè)字符和數(shù)字關(guān)系映射文件,例如字符E282對(duì)應(yīng)數(shù)字9、字符F11B對(duì)應(yīng)數(shù)字5。
現(xiàn)在我們?cè)賮?lái)看一下源碼里的亂碼:
有沒(méi)有看出什么端倪?
是的,它們并不是什么亂碼,而是而字體文件里的字符一一對(duì)應(yīng)的!
根據(jù)對(duì)應(yīng)關(guān)系可以推斷出亂碼“.”對(duì)應(yīng)數(shù)字9.5,正好和頁(yè)面上顯示的是一致的。
總結(jié)
這個(gè)反爬蟲(chóng)機(jī)制的現(xiàn)象是頁(yè)面顯示數(shù)字正常,但是源碼里顯示亂碼;這個(gè)反爬蟲(chóng)機(jī)制的工作原理就是通過(guò)字體文件將亂碼和數(shù)字建立好映射關(guān)系。

傳統(tǒng)的ua限制,ip請(qǐng)求限制,驗(yàn)證碼等就不說(shuō)了,來(lái)點(diǎn)新鮮的吧
轉(zhuǎn)換字體,需要做字體映射,比如大眾點(diǎn)評(píng)
每一項(xiàng)生成不同css或者id,增加規(guī)則定義難度,比如某些搜索引擎
在內(nèi)容元素上增加一個(gè)浮動(dòng)塊,讓用戶(hù)選不中當(dāng)前元素
圖片需要滾動(dòng)到可見(jiàn)窗口的時(shí)候才裝載,不然不裝載,并且圖片地址也不對(duì),比如阿里巴巴國(guó)際版
如果用了工具,比如八爪魚(yú),后羿,迷你派等采集器的感受可能會(huì)深一點(diǎn)。
- 下一篇:裝修必做的是什么?
- 上一篇:做大學(xué)輔導(dǎo)員有前途嗎?
