爬蟲不是真實(shí)用戶,其行為模式與真實(shí)用戶不同。因此,平臺(tái)經(jīng)常檢測(cè)用戶行為模式,以識(shí)別當(dāng)前用戶是人類還是爬蟲機(jī)器。這個(gè)平臺(tái)是通過哪些方式測(cè)試的?我們來看看下面的小編。
1.訪問內(nèi)容。
爬蟲通常不抓取css、js和其他資源文件。如果是垂直爬蟲,訪問數(shù)據(jù)的目的往往很明顯。如果某些IP訪問某些數(shù)據(jù)的頻率高于正常情況,而這些IP沒有訪問任何其他資源,那么可以斷定它是一個(gè)爬蟲。
2.訪問頻率。
頻率限制:每分鐘訪問次數(shù)超過n次的IP被屏蔽。如果3小時(shí)內(nèi)有50次以上的訪問,會(huì)彈出一個(gè)驗(yàn)證框。如果驗(yàn)證內(nèi)容輸入不正確,將被列入黑名單。
做一個(gè)計(jì)數(shù)器記錄一天的總次數(shù)和特定ip的每秒頻率,從而達(dá)到實(shí)時(shí)攔截的目的(這個(gè)類似淘寶的TMD使用分布式緩存進(jìn)行計(jì)數(shù),超出規(guī)則,或者直接拒絕或者跳轉(zhuǎn)到輸入驗(yàn)證碼的頁(yè)面)。
3.港口檢查。
檢查端口80與netstat的連接:
sh netstat-nt | grep you hostip:80 | awk ' ' | awk-F ":" " | sort | uniq-c | sort-r-n
在這一行中,shell可以根據(jù)80端口連接數(shù)對(duì)源IP進(jìn)行排序,從而直觀地判斷網(wǎng)絡(luò)爬蟲。一般來說,爬蟲的并發(fā)連接非常高。封鎖爬蟲直接所在的C網(wǎng)段的地址。這是因?yàn)橐话愕呐老x都是在托管機(jī)房運(yùn)行的,一個(gè)C段可能有多個(gè)服務(wù)器上的爬蟲,但是這個(gè)C段不能是用戶的寬帶上網(wǎng)。阻塞C段可以在很大程度上解決問題。
4.js埋點(diǎn)。
對(duì)比apache或nginx日志分析與js埋點(diǎn),當(dāng)爬蟲請(qǐng)求無(wú)法模擬瀏覽器請(qǐng)求時(shí),js代碼無(wú)法執(zhí)行,頁(yè)面上沒有埋點(diǎn),但這個(gè)請(qǐng)求會(huì)留在web日志中。js有一個(gè)小問題,就是當(dāng)用戶請(qǐng)求時(shí),如果瀏覽器有緩存,其實(shí)并不會(huì)請(qǐng)求服務(wù)器,但是js確實(shí)埋了一個(gè)點(diǎn),對(duì)比分析后效果會(huì)好很多。
5.訪問間隔的規(guī)律性。
爬蟲抓取網(wǎng)頁(yè)的頻率是相對(duì)固定的,不像人訪問網(wǎng)頁(yè),兩者之間的間隔時(shí)間是比較不規(guī)律的,所以我們可以為每個(gè)IP地址設(shè)置一個(gè)時(shí)間窗口,記錄下該IP地址最近12次的訪問,每條記錄滑動(dòng)一次窗口,將最近的訪問時(shí)間與當(dāng)前時(shí)間進(jìn)行比較。如果間隔較長(zhǎng),判斷不是爬蟲,則清除時(shí)間窗口;如果間隔不長(zhǎng),追溯計(jì)算指定時(shí)間段的訪問頻率;如果訪問頻率超過閾值,請(qǐng)轉(zhuǎn)到驗(yàn)證碼頁(yè)面,讓用戶填寫驗(yàn)證碼。
綜上所述,網(wǎng)絡(luò)爬蟲畢竟不是人,會(huì)留下痕跡。因此,為了獲取信息,爬蟲需要先偽裝數(shù)據(jù)的各個(gè)方面。對(duì)于無(wú)法偽裝的數(shù)據(jù)——IP地址,可以使用IP模擬器進(jìn)行IP地址的切換,使數(shù)據(jù)能夠順利采集。