反爬蟲策略調研與分析

爬蟲時代

在互聯網上,各類的信息數據相當大一部分是發佈在Web頁面上的,於是一大批以此爲生的網站便誕生了。 baidu和google便成爲其中的佼佼者,它們是這個星球上最大牌的爬蟲,最多的爬蟲,爲這個世界的Web頁面建立索引,方便大家查找信息。在爬蟲基礎之上,纔有了大家每天都離不開的搜索引擎服務。
爬蟲可以爬取任何可以訪問的Web頁面,開發一個爬蟲其實非常的簡單和容易。但是並不是所有的頁面都是非常容易獲取信息的,於是便誕生了各類的反爬蟲策略。道高一尺魔高一丈,反爬蟲策略的興起,則在一定程度上提高了爬蟲的入門門檻。

爲什麼要反扒?

  1. 爬蟲的PV訪問如果量很大,且無節制,會造成大量的服務器資源消耗
  2. 公司的核心數據被爬蟲無償爬取,對於公司來說降低了競爭力,這是一種損失。
  3. 爬蟲爬取的數據,是有價值的,但是對於被爬取方卻無法從中得到好處。
  4. 4.

反爬蟲策略

  1. robots.txt
    robots.txt(統一小寫)是一種存放於網站根目錄下的ASCII編碼的文本文件,它通常告訴網絡搜索引擎的漫遊器(又稱網絡蜘蛛),此網站中的哪些內容是不應被搜索引擎的漫遊器獲取的,哪些是可以被漫遊器獲取的。因爲一些系統中的URL是大小寫敏感的,所以robots.txt的文件名應統一爲小寫。robots.txt應放置於網站的根目錄下。如果想單獨定義搜索引擎的漫遊器訪問子目錄時的行爲,那麼可以將自定的設置合併到根目錄下的robots.txt,或者使用robots元數據(Metadata,又稱元數據)。
    robots.txt協議並不是一個規範,而只是約定俗成的,所以並不能保證網站的隱私。注意robots.txt是用字符串比較來確定是否獲取URL,所以目錄末尾有與沒有斜槓“/”表示的是不同的URL。robots.txt允許使用類似”Disallow: *.gif”這樣的通配符.
    對於搜索引擎的爬蟲來說,會遵守類似規則,對於個人開發的爬蟲來說,則一般不會關注robots.xml中的約束。
  2. 後臺對訪問進行統計,如果單個IP訪問超過閾值,予以封鎖。
    在某個時間段內,對於來源於特定ip的請求,超過某個閾值之後,對於這個IP的訪問進行封鎖。
    分析: 容易封鎖正常訪問的用戶,誤傷好人。 目前IP資源非常廉價,IP資源池可以很低成本低獲取,都是包月服務,這個是最容易突破的防線。
  3. 後臺對訪問進行統計,如果單個session訪問超過閾值,予以封鎖。
    對單個session的訪問次數進行統計,超過法制,進行封鎖。
    分析: 這個策略很基礎,基本無效。 當連接斷開後,重新連接,即可重新生成session。
  4. 基於規則的驗證碼人機檢查
    當系統懷疑當前的請求是來自於機器人或者爬蟲之時,將彈出驗證碼對話框,要求用戶填入正確的驗證碼,方可正常訪問。
    分析: 對於某些情況下,正常的用戶訪問也會被提示驗證碼,用戶體驗不好。
    爬蟲可以基於tensorflow或者第三方接口自動提取驗證碼,並自動填入,從而突破驗證碼策略。普通的驗證碼識別是有一定的技術門檻和複雜度的。
  5. 基於Cookie中特殊值的判定。
    通過cookie限制抓取信息,比如我們模擬登陸之後,想拿到登陸之後某頁面信息,千萬不要以爲模擬登陸之後就所有頁面都可以抓了,有時候還需要請求一些中間頁面拿到特定cookie,然後纔可以抓到需要的頁面。
    分析: 可以有效地阻止大部分的爬蟲,當不符合cookie中的值時,則跳轉或者餵給其假數據。
    解決辦法: 需要針對流程進行分析,觀察整個過程都請求了哪些URL(主要包括HTML、JS、XHR),挨個試,試到成功爲止
  6. 對於核心數據的加載,使用動態Javascript腳本來加載。
    當爬蟲請求的頁面返回時,其中並沒有期望的核心數據。其中的數據是通過javascript動態加載的腳本,在腳本中使用ajax請求,然後利用回調函數的方式來將數據填充到頁面中。在頁面實現層面就是將數據與頁面顯示分離開。
    分析: 對於簡單爬蟲來說,是一場噩夢,很多核心的數據是拿不到的。
    解決辦法: 需要分析頁面找到對應的請求,然後分析請求,模擬請求得到最終想要的數據。或者使用無頭瀏覽器的方式也可以規避這個問題。
  7. javascript渲染
    網頁開發者將重要信息放在網頁中但不寫入html標籤中,而瀏覽器會自動渲染

參考資料

  1. scrapy-proxies https://github.com/aivarsk/scrapy-proxies
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章