一、概述
網站反爬蟲的原因
- 不遵守規范的爬蟲會影響網站的正常使用
- 網站上的數據是公司的重要資產
- 爬蟲對網站的爬取會造成網站統計數據的污染
常見反爬蟲手段
1. 根據 IP 訪問頻率封禁 IP
2. 設置賬號登陸時長,賬號訪問過多封禁
設置賬號的登錄限制,只有登錄才能展現內容
設置賬號登錄的時長,時間一到則自動退出
3. 彈出數字驗證碼和圖片確認驗證碼
爬蟲訪問次數過多,彈出驗證碼要求輸入
4. 對 API 接口的限制
每天限制一個登錄賬戶后端 api 接口的調用次數
對后台 api 返回信息進行加密處理
二、nginx反爬設置
站點配置文件
因為user-agent帶有Bytespider爬蟲標記,這可以通過Nginx規則來限定流氓爬蟲的訪問,直接返回403錯誤。
修改對應站點配置文件(注意是在server里面)
添加紅色部分
server { listen 80 default_server; listen [::]:80 default_server; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } #forbidden Scrapy if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { return 403; } #forbidden UA if ($http_user_agent ~ "Bytespider|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|python-requests|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) { return 403; } #forbidden not GET|HEAD|POST method access if ($request_method !~ ^(GET|HEAD|POST)$) { return 403; } }
附錄:UA收集

FeedDemon 內容采集 BOT/0.1 (BOT for JCE) sql注入 CrawlDaddy sql注入 Java 內容采集 Jullo 內容采集 Feedly 內容采集 UniversalFeedParser 內容采集 ApacheBench cc攻擊器 Swiftbot 無用爬蟲 YandexBot 無用爬蟲 AhrefsBot 無用爬蟲 YisouSpider 無用爬蟲(已被UC神馬搜索收購,此蜘蛛可以放開!) jikeSpider 無用爬蟲 MJ12bot 無用爬蟲 ZmEu phpmyadmin 漏洞掃描 WinHttp 采集cc攻擊 EasouSpider 無用爬蟲 HttpClient tcp攻擊 Microsoft URL Control 掃描 YYSpider 無用爬蟲 jaunty wordpress爆破掃描器 oBot 無用爬蟲 Python-urllib 內容采集 Python-requests 內容采集 Indy Library 掃描 FlightDeckReports Bot 無用爬蟲 Linguee Bot 無用爬蟲 使用python驗證
python驗證
使用requests模塊
import requests # 最基本的不帶參數的get請求 r = requests.get('http://192.168.28.229') print(r.content)
使用urllib模塊
import urllib.request response = urllib.request.urlopen('http://192.168.28.229/') print(response.read().decode('utf-8'))
返回403就表示起作用了。
b'<html>\r\n<head><title>403 Forbidden</title></head>\r\n<body>\r\n<center><h1>403 Forbidden</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n'
三、整站防護設置
示意圖
第一層
robots.txt
robots是網站跟爬蟲間的協議,用簡單直接的txt格式文本方式告訴對應的爬蟲被允許的權限,也就是說robots.txt是搜索引擎中訪問網站的時候要查看的第一個文件。
注意:它只是做了協議規定,是否允許將爬取的數據收錄,不影響網頁訪問。
備注:對於手動寫爬蟲技術人員而言,一般都是直接忽略掉的。
如果不允許所有的爬蟲蜘蛛訪問,內容如下:
User-agent: *
Disallow: /
第二層
useragent特征攔截
因為user-agent帶有Bytespider爬蟲標記,這可以通過Nginx規則來限定流氓爬蟲的訪問,直接返回403錯誤。
具體操作,請查看上面的nginx配置。
備注:這樣可以防止一部分爬蟲訪問,以及初級爬蟲人員。
第三層
JS發送鼠標點擊事件
有些網站,你從瀏覽器可以打開正常的頁面,而在requests里面卻被要求輸入驗證碼或者是重定向到其他的頁面。
原理:當點擊登錄時,觸發js加密代碼,復雜的加密算法參數+時間戳+sig值,后台進行 參數+時間的限制。驗證成功后,才可以登錄。
備注:爬蟲高手需要模擬瀏覽器行為,加載js代碼以及圖片識別,才能正常登陸。
第四層
后台接口限制
1. 根據 IP 訪問頻率封禁 IP(注意:頻率要控制好,否則容易誤傷。)
2. 設置賬號登陸時長,賬號訪問過多封禁。
設置賬號的登錄限制,只有登錄才能展現內容設置賬號登錄的時長,時間一到則自動退出
3.彈出數字驗證碼和圖片確認驗證碼
爬蟲訪問次數過多,前端彈出驗證碼要求輸入
4.對 API 接口的限制
每天的登錄賬戶,請求后端 api 接口時,做調用次數限制。對后台 api 返回信息進行加密處理
通過這4層設置,就可以有效的保護數據的安全了。
本文參考鏈接:
https://www.cnblogs.com/itsharehome/p/11114588.html
https://www.cnblogs.com/tulintao/p/11616640.html
https://www.cnblogs.com/JinZL/p/11738245.html