使用代理IP進(jìn)行信息采集:如何判斷是爬蟲行為
Python爬蟲并不是真實(shí)的用戶,他的行為模式和真正的用戶還是有區(qū)別的,所以網(wǎng)站通常會采用測試用戶行為模式去分辨目前瀏覽的用戶到底是人還是爬蟲機(jī)器。那么網(wǎng)站究竟通過什么途徑來實(shí)現(xiàn)檢測的呢?現(xiàn)在就和帶你們來看一看。

1.瀏覽目的
爬蟲通常不會抓取css、js等一些資源文件。假如是垂直爬蟲,一般瀏覽信息有明確的目標(biāo),假如察覺到一些ip瀏覽某個頁面超出了正常的訪問次數(shù),并且ip不瀏覽別的信息,那就會被辨別為爬蟲。
2.瀏覽頻率
頻率限制,每分鐘高于N次訪問的ip封禁,比如1個小時瀏覽量高于30次,則會跳出驗(yàn)證提示,假如驗(yàn)證信息填寫有誤,就會被拉入黑名單。
弄一個計(jì)數(shù)器,把特定ip一天內(nèi)的總次數(shù)和每秒內(nèi)的頻率記錄下來,實(shí)現(xiàn)實(shí)時攔截的目的
3.端口檢查
用netstat檢查80端口的連接:
sh netstat -nt | grep youhostip:80 | awk ” | awk -F”:” ”| sort | uniq -c | sort -r -n
這行shell能夠根據(jù)80端口連接數(shù)量對來源IP完成排序,這樣能夠直觀地分辨出來網(wǎng)頁爬蟲。通常情況下爬蟲的并發(fā)連接特別高。 直接封鎖爬蟲所在的C網(wǎng)段地址。這由于一般爬蟲都是運(yùn)行在托管機(jī)房里面,可能在一個C段里面的多臺服務(wù)器上面都有爬蟲,而這個C段不可能是用戶寬帶上網(wǎng),封鎖C段能夠很大程度上解決問題。
4.js埋點(diǎn)
把a(bǔ)pache或nginx日志分析和js埋點(diǎn)對比來分析,爬蟲請求在無法模擬瀏覽器請求的時候,無法執(zhí)行js代碼,頁面沒有埋點(diǎn),但是這個請求,會在web日志中留下,js有小問題,就是用戶請求的時候,如果瀏覽器有緩存,實(shí)際上沒有請求服務(wù)器端,但是js確埋了一個點(diǎn),對比分析,效果會好很多。
5.訪問間隔規(guī)律
爬蟲爬取網(wǎng)頁的頻率都是比較固定的,不像人去訪問網(wǎng)頁,中間的間隔時間比較無規(guī)則,所以我們可以給每個IP地址建立一個時間窗口,記錄IP地址最近12次訪問時間,每記錄一次就滑動一次窗口,比較最近訪問時間和當(dāng)前時間。如果間隔時間很長判斷不是爬蟲,清除時間窗口,如果間隔不長,就回溯計(jì)算指定時間段的訪問頻率,如果訪問頻率超過閥值,就轉(zhuǎn)向驗(yàn)證碼頁面讓用戶填寫驗(yàn)證碼。
綜上所述,我們能夠知道,網(wǎng)絡(luò)爬蟲畢竟不是人類,總會留下足跡的,所以想要獲取信息,爬蟲需要先進(jìn)行一系列的偽裝,把各方面的數(shù)據(jù)偽裝好,至于不能偽裝的數(shù)據(jù)–IP地址,可以使用我們的代理ip切換ip地址,這樣便能順利地采集到數(shù)據(jù)了。