應對反爬蟲的策略
伺服器處理web請求
DNS:(Domain Name System)域名系統。因特網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路。通過主機名,最終得到該主機對應的IP地址的過程叫做域名解析。DNS協議執行在UDP(UserDatagram Protocol,使用者資料協議)協議之上,使用埠號53。
CDN:(Content Delivery Network)內容分發網路。其基本思路是儘可能避開有可能影響資料傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。通過在網路各處防止節點伺服器所構成的現有的網際網路基礎之上的一層智慧虛擬網路,CDN系統能夠實時地根據網路流量和各節點的連線、負載狀況以及到使用者的距離和響應時間將使用者的請求重新導向離使用者最近的服務節點上。目的是使使用者可就近取得所需內容,解決Internet網路擁擠的狀況
埠對映(Port Mapping):是NAT(Network Address Translaton,網路地址轉換)的一種,功能是把在公網的地址轉翻譯成私有地址,採用路由方式的ADSL(Asymmetric Digital Subscriber Line,非對稱數字使用者線路)寬頻路由器擁有一個動態或固定的公網IP,ADSL直接在HUB或交換機上,所有的電腦共享上網。
EXT:(Extended File System)延伸檔案系統。一種檔案系統。
PHP-FPM(FastCGI Process Manager:FastCGI程序管理器):一個PHPFastCGI管理器。
Servlet:(Server Applet)是Java Servlet的簡稱,是為小服務程式或服務聯結器,用Java編寫的伺服器端程式,主要功能在於互動式地瀏覽和修改資料,生成動態Web內容。
伺服器處理web請求流程:
1、到達防火牆,對訪問頻次進行檢查; (host上的Firewall)
2、進行埠對映,到達對應的服務,例如Apache;
3、到達Apache,通過virtualhost 查詢根目錄;
4、查詢.htaccess偽靜態設定,對映實際目錄及檔案;
5、執行指令碼或提取檔案;
6、確認cookie資訊,查詢使用者;
7、使用者許可權檢查;
8、返回資料。
虛擬主機(Virtualhost):即Vhost,是Linux中的虛擬主機系統。是在同一臺機器搭建屬於不同域名或者基於不同IP的多個網站服務的技術,可以為執行在同一物理基期上的各個網站支配不同的IP和埠,也可讓多個網站擁有不同的域名。
Session:會話控制。Session 物件儲存特定使用者會話所需的屬性及配置資訊。這樣,當用戶在應用程式的Web 頁之間跳轉時,儲存在 Session 物件中的變數將不會丟失,而是在整個使用者會話中一直存在下去。當用戶請求來自應用程式的 Web 頁時,如果該使用者還沒有會話,則 Web 伺服器將自動建立一個 Session 物件。當會話過期或被放棄後,伺服器將終止該會話。
Virtual host
定義:一臺伺服器主機可以處理多個域名或IP;將不同的域名及IP對映到不同的網站根目錄
對爬蟲的影響:不同的域名指向同一個伺服器,更容易被伺服器識別為爬蟲(異常訪問)而禁止;
對於一個域名對映多臺伺服器的網站,在單機上不能併發抓取不同伺服器的資料
htaccess:HyperText Access(超文字入口)。htaccess檔案(或者“分散式配置檔案”)是Apache伺服器中的一個配置檔案,它負責相關目錄下的網頁配置。通過htaccess檔案,可以實現:網頁301重定向、自定義404錯誤頁面、改變副檔名、允許/阻止特定的使用者或者目錄的訪問、禁止目錄列表、配置預設文件等功能。
偽靜態:實際的檔案系統結構與網路請求路徑分離。相對於靜態而言的。與靜態相比:
1)從URL結構以及頁面名稱看,偽靜態和靜態頁面是一樣的。偽靜態的頁面字尾可以是html/htm 或者是目錄格式
2)偽靜態只是改變了URL的表現形式,實際上還是動態頁面
3)靜態頁面可以節省伺服器資源,而偽靜態嚴格說是增加伺服器資源消耗的
Inf檔案:(Device INFormation File,裝置資訊檔案)是Microsoft公司為硬體裝置製造商釋出其驅動程式推出的一種檔案格式,INF檔案中包含硬體裝置的資訊或指令碼以控制硬體操作。在INF檔案中指明瞭硬體驅動該如何安裝到系統中,原始檔在哪裡、安裝到哪一個資料夾中、怎樣在登錄檔中加入自身相關資訊等等。
U盤病毒:又稱Autorun病毒,就是通過U盤產生Autorun.inf進行傳播的病毒。
Autorun.inf:是我們電腦使用中比較常見的檔案之一,其作用是允許在雙擊磁碟時自動執行指定的某個檔案。
路由過程:通常第一步是身份及許可權檢查。
二、網站如何發現爬蟲
1)單一IP非常規的訪問頻次
2)單一IP非常規的資料流量
3)大量重複簡單的網站瀏覽行為 (絕大多數情況,只有機器人才會做深翻頁)
4)只下載網頁,沒有後續的js、CSS請求 (在應用層)
5)通過一些陷阱來發現爬蟲,例如一些通過CSS對使用者影藏的連結,只有爬蟲才會訪問
三、網站如何進行反爬
(一)UserAgent
假設我們已經確定了兩類爬蟲的UserAgent,它們分別是Nutch和Scrapy
User-Agent:Nutch
User-Agent:Scrapy
對應反爬蟲的.htaccess檔案定義:
BrowserMatchNoCaseNutch bad_bot
BrowserMatchNoCaseScrapy bad_bot
Order Deny,Allow
Deny fromenv=bad_bot
(二).htaccess
(批量資料處理,通過大資料、機器學習的方式來去分析判斷找出爬蟲。即使訪問頻次不是很高,也有可能被發現。)
1、Check access_log file (網站下面訪問請求的所有日誌,還有error_log。如果一個IP請求的只有HTML,沒有js、CSS的話,基本可以斷定是爬蟲)
2、OrderDeny,Allow (統計一個IP在一天內一共請求了多少次)
(三)JavaScript
例如京東。大量使用動態網頁,使得爬蟲的爬取難度增加,常規手段只能拿到一個基本的HTML頁面,重要的資料等資訊都拿不到。
即使爬蟲採用了web環境來渲染網頁,也會大大增加爬蟲的負擔與爬取的時間。
同時,採用動態載入資料,大大降低伺服器的負擔。
(四)基於流量的拒絕
開啟頻寬(BandWidth)限制模組
LoadModule bw_module(頻寬的檢查)
設定訪問的最大頻寬,每個IP最大三個連線,最大1MB/s
(五)基於IP連線的拒絕 (Apatch裡面配的)
1、some_folder目錄每個IP最多1個同時的連線,不限制image/*目錄的檔案
2、/home/*/public_html目錄限制僅限1個IP訪問
(六)IPtables的控制
IPTABLES 是與最新的 3.5 版本 Linux 核心整合的 IP 資訊包過濾系統。如果 Linux 系統連線到因特網或 LAN、伺服器或連線 LAN 和因特網的代理伺服器, 則該系統有利於在 Linux 系統上更好地控制 IP 資訊包過濾和防火牆配置。
例如:Limit HTTPConnection Per IP / Host
例如:Limit HTTPConnection Per IP / Host Per Second
四、如何發現自己可能被網站識別了
1、CAPTCHApages (captcha,驗證碼)
2、Unusualcontent delivery delay (響應時間、速度變慢了)
3、Frequentresponse with HTTP404,301 or 50x errors
(1)301 MovedTemporarily
(2)401unauthorized
(3)403forbidden (aAatch處理的)
(4)404 notfound
(5)408 requesttimeout
(6)429 too manyrequests
(7)503 serviceunavailable (ip層)
五、好的規避反爬蟲檢查的方法
(一)多主機策略;(客戶端多主機或者伺服器多主機)
(二)爬得慢一點,不要攻擊主機,如果發現被阻止,立即降低訪問頻次,設計得smart一點,來找到訪問頻次限制的臨界點;
(三)通過變換 IP 或 代理伺服器 來掩飾;
很多網站在不同的地方都有不同的伺服器(IP不同),這時即可通過動態切換IP去訪問同一個網站,以解決訪問頻次或流量限制的問題。
尋找分散式伺服器:“站長之家”網站裡面查詢一些網站的分散式伺服器部署IP的情況,用IP進行訪問。
在全球有很多站點,怎樣獲得站點?搜尋“頂級域名”,把結果複製出來,即可。
動態IP切換技術:
1、模擬路由器登入(家裡,IP都不是固定的。斷開,隔5分鐘再連線,IP就會不一樣。封鎖是基於IP的)
2、通過POSTMAN查詢路由器的斷線、重連線口
3、當發現IP被主機識別後,強制路由器斷線、重連
(四)把爬蟲放到訪問頻繁的主站IP的子網下,例如教育;
(五)頻繁改變自己的User-Agent;
(六)探測陷阱,比如nofollow的tag,或者display:none的CSS;
aws(業務流程管理開發平臺):AWS BPM業務流程管理開發平臺是一個易於部署和使用的業務流程管理基礎平臺軟體,AWS平臺提供了從業務流程梳理、建模到執行、監控、優化的全週期管理和麵向角色的BPMTotal Solution。
(七)如果使用了規則(pattern)來批量爬取,需要對規則進行組合;
(八)如果可能,按照Robots.txt定義的行為去文明抓取。