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