当我们在爬取别人的网站的时候,我们自己的网站也有可能会被别人爬,呵呵,怎样防止自己的网站不被其他人爬取呢?通过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 ...... ...
看到了吗?百度蜘蛛是抓取成功的!