我主要對反爬蟲和反反爬蟲做一個簡單的總結
我想補充一下關於爬蟲和反爬蟲,以及爲什麼要爬蟲,爲什麼要反爬蟲,也就是從技術和技術帶來的影響的角度來看待爬蟲。發現一個很有意思的鏈接,
1 爬蟲、反爬蟲、反反爬蟲
l 爬蟲 —— 使用任何技術手段批量獲取網站信息的一種方式,關鍵在批量。
l 反爬蟲 —— 使用任何技術手段,阻止別人批量獲取自己網站信息的一種方式。關鍵也在於批量。
l 誤傷 —— 在反爬蟲的過程中,錯誤的將普通用戶識別爲爬蟲。誤傷率高的反爬蟲策略,效果再好也不能用。
l 攔截 —— 成功地阻止爬蟲訪問。通常來說,攔截率越高的策略,誤傷率就越高,因此要做權衡。
l 資源 —— 機器成本與人力成本的總和。
2 常見的爬蟲、反爬蟲、反反爬蟲手段
爬蟲、反反爬蟲 | 反爬蟲 |
對某個網站或者APP的數據感興趣。 [1] | |
首先分析網站/APP [2]的請求與返回數據,然後用python,或Java,或網上免費的抓取軟件,不斷遍歷某列表抓取數據存數據庫。 | |
zabbix等監控顯示某時間段請求陡增,ip相同,useragent還是JavaClient,直接Nginx封殺這個ip | |
useragent模仿谷歌或者百度瀏覽器,再獲取十幾個代理ip,爬的過程中不斷輪詢替換ip | |
發現ip不斷變化,直接每次請求添加用戶是否登錄的校驗 | |
通過註冊等各種方法,獲取一個真實賬號,模擬登錄,每次請求攜帶登錄產生的cookie或者token。 | |
健全賬號權限體系,即擁有A的賬號,無法獲取賬號B的數據訪問權限。 | |
設置定時器,簡單粗暴的直接爬取所有能爬取的數據 | |
針對多IP的高頻訪問,Nginx設置頻率限制,如某個ip短時間訪問超過一定次數就直接屏蔽,一定程度增加爬蟲方獲取有效IP的成本 | |
寫代碼爬取ip代理網站,或者批量購買高匿代理ip,幾千IP輪詢爬 | |
在訪問頻率上繼續做文章,升級ip限制策略,加大ip限制的成功率。 | |
ip大量被封,爲了解決這問題,開始模擬人類請求特徵,比如每半小時爬取改爲隨機1-3秒爬一次,爬10次休息10秒,每天只在8-12,18-0點爬,隔幾天還休息一下。再比如爲了減少請求,能只抓列表頁就不抓詳情頁 | |
此刻再在訪問頻率上做限制,可能會誤傷真實用戶。如果網站類型不太注重用戶體驗,可以訪問一定次數強制彈框要求輸入驗證碼 | |
簡單的驗證碼,完全可以自學圖像識別的教程(關鍵詞PIL,tesseract),對驗證碼進行二值化預處理,分割,模式訓練後,識別驗證碼 | |
針對具有用戶行爲的爬蟲,首先要明白,爬蟲與人類在訪問特徵上最大的不一樣在於,人不會長時間持續訪問一個網站,而爬蟲的訪問數量會隨着時間增長而線性增長。根據這特徵,分析請求日誌,設置ip黑名單 | |
由於各種限制,單個爬蟲輪詢ip模擬用戶行爲進行爬取,效率已經大大降低。這個時候有條件,可以考慮分佈式,跨省跨機房,利用ADSL進行長期爬取 | |
既然無法避免被爬,那就繼續加大對方爬取成本 | |
如果死磕到底。。 | |
只能硬着頭皮和他繼續死磕,直到一方因爲機器成本與人力成本問題放棄。 |
3 爲什麼需要反爬蟲?
l 公司的重要資源被批量爬取,喪失競爭力。
l 爬蟲佔總PV比例太高,因爲高訪問量浪費了太多錢。
l 爬蟲拖垮了站點,嚴重影響了用戶體驗。
l 資源被爬取難以起訴成功,對方可以肆意爬取
4 反爬蟲的一些措施
反爬蟲的關鍵在於阻止被批量爬取,重點在批量。反爬蟲技術的核心在於不斷變更規則,比如不斷變更驗證碼。我們在內容上可以做如下文章:
l 網站不同地方的文本內容添加不同的自帶標籤,增加對方數據清理難度。
l 關鍵數據由文本轉圖片,甚至添加水印等。目前市場上圖片ocr識別無法有效轉文字,讓對方即使獲取了圖片也無法有效使用。
l 網站相關頁面的列表查詢,限制總頁數的展示。比如數據一共1K頁,相關接口卻只對外展示前十頁。對方找不到入口最多爬取10頁數據。
l 間接關閉網站核心數據查看入口,比如內容的查看像百度文庫一樣改爲word、pdf或者ppt下載模式,高頻下載需要驗證碼或者賬號積分。
l 網站不提供註冊入口,或者註冊需要內部推薦或者評審,加大爬蟲方獲取賬號的難度。
l 網站的請求url複雜化,比如弄的像淘寶一樣沒有規律,id改爲UUID等。
l 前端頁面儘可能不暴露數據的唯一鍵,對唯一鍵如主鍵id等進行僞裝,可以增加對方爬取後的去重成本。因爲對方爬數據可能是在你的多個模塊頁面進行多維度爬取,會有大量的重複數據。
l 前端html頁面別一次性加載列表,根據用戶點擊js動態加載。即查詢頁面源碼時,只能看到列表的第一條數據。
l 當確定訪問異常時,大量返回虛假數據。爬蟲幾乎沒有判斷數據真假的能力,只有人才有。對方發現的越晚,我們的處理應對時間就越充裕。
l 核心數據提高安全等級,單獨加密等。