当我们在爬取别人的网站的时候,我们自己的网站也有可能会被别人爬,呵呵,怎样防止自己的网站不被其他人爬取呢?通过Nginx, 我们可以拦截大部分爬虫。那么再增加一个反爬虫配额文件:
vim /usr/local/nginx/conf/anti_spider.conf
写入:
#禁止Scrapy等工具的抓取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
return 403;
}
#禁止指定UA及UA为空的访问
if ($http_user_agent ~ "WinHttp|WebZIP|FetchURL|node-superagent|java/|FeedDemon|Jullo|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|Java|Feedly|Apache-HttpAsyncClient|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|BOT/0.1|YandexBot|FlightDeckReports|Linguee Bot|^$" ) {
return 403;
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}
#屏蔽单个IP的命令是
#deny 123.45.6.7
#封整个段即从123.0.0.1到123.255.255.254的命令
#deny 123.0.0.0/8
#封IP段即从123.45.0.1到123.45.255.254的命令
#deny 124.45.0.0/16
#封IP段即从123.45.6.1到123.45.6.254的命令是
#deny 123.45.6.0/24
# 以下IP皆为流氓
#deny 58.95.66.0/24;
在网站配置server段中都插入
# 反爬虫
include /usr/local/nginx/conf/anti_spider.conf;
重启:
systemctl restart nginx #或者用你自己的方法重启或重载配置
爬虫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 内容采集
Indy Library 扫描
FlightDeckReports Bot 无用爬虫
Linguee Bot 无用爬虫
使用curl -A 模拟抓取即可,比如:
# -A表示User-Agent
# -X表示方法: POST/GET
# -I表示只显示响应头部
curl -X GET -I -A 'YYSpider' https://pengxb.com
HTTP/1.1 403 Forbidden
Server: nginx/1.12.2
Date: Mon, 26 Feb 2018 07:31:32 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 169
Connection: keep-alive
模拟UA为空的抓取:
curl -I -A ' ' https://pengxb.com
HTTP/1.1 403 Forbidden
Server: nginx/1.12.2
Date: Mon, 26 Feb 2018 07:32:14 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 169
Connection: keep-alive
模拟百度蜘蛛的抓取:
curl -I -A 'Baiduspider' https://pengxb.com
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Mon, 26 Feb 2018 07:32:47 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
......
...
看到了吗?百度蜘蛛是抓取成功的!