您好,欢迎访问一九零五行业门户网

php如何设置禁止抓取网站

php禁止抓取的实现方法:首先通过“$_server['http_user_agent'];”方法获取ua信息;然后将恶意“user_agent”存入数组;最后禁止空“user_agent”等主流采集程序即可。
推荐:《php教程》
我们都知道网络上的爬虫非常多,有对网站收录有益的,比如百度蜘蛛(baiduspider),也有不但不遵守robots规则对服务器造成压力,还不能为网站带来流量的无用爬虫,比如宜搜蜘蛛(yisouspider)(最新补充:宜搜蜘蛛已被uc神马搜索收购!所以本文已去掉宜搜蜘蛛的禁封!==>相关文章)。最近张戈发现nginx日志中出现了好多宜搜等垃圾的抓取记录,于是整理收集了网络上各种禁止垃圾蜘蛛爬站的方法,在给自己网做设置的同时,也给各位站长提供参考。
一、apache①、通过修改 .htaccess文件二、nginx代码进入到nginx安装目录下的conf目录,将如下代码保存为 agent_deny.conf
cd /usr/local/nginx/conf
vim agent_deny.conf
#禁止scrapy等工具的抓取if ($http_user_agent ~* (scrapy|curl|httpclient)) {return 403;}#禁止指定ua及ua为空的访问if ($http_user_agent ~* "feeddemon|indy library|alexa toolbar|asktbfxtv|ahrefsbot|crawldaddy|coolpadwebkit|java|feedly|universalfeedparser|apachebench|microsoft url control|swiftbot|zmeu|obot|jaunty|python-urllib|lightdeckreports bot|yyspider|digext|httpclient|mj12bot|heritrix|easouspider|ezooms|^$" ) {return 403;}#禁止非get|head|post方式的抓取if ($request_method !~ ^(get|head|post)$) {return 403;}
然后,在网站相关配置中的 location / { 之后插入如下代码:
include agent_deny.conf;
如张戈博客的配置:
[marsge@mars_server ~]$ cat /usr/local/nginx/conf/zhangge.conf
location / {try_files $uri $uri/ /index.php?$args;#这个位置新增1行:include agent_deny.conf;rewrite ^/sitemap_360_sp.txt$ /sitemap_360_sp.php last;rewrite ^/sitemap_baidu_sp.xml$ /sitemap_baidu_sp.php last;rewrite ^/sitemap_m.xml$ /sitemap_m.php last;保存后,执行如下命令,平滑重启nginx即可:/usr/local/nginx/sbin/nginx -s reload
三、php代码将如下方法放到贴到网站入口文件index.php中的第一个 <?php 之后即可:
//获取ua信息
$ua = $_server['http_user_agent'];//将恶意user_agent存入数组$now_ua = array('feeddemon ','bot/0.1 (bot for jce)','crawldaddy ','java','feedly','universalfeedparser','apachebench','swiftbot','zmeu','indy library','obot','jaunty','yandexbot','ahrefsbot','mj12bot','winhttp','easouspider','httpclient','microsoft url control','yyspider','jaunty','python-urllib','lightdeckreports bot');
//禁止空user_agent,dedecms等主流采集程序都是空user_agent,部分sql注入工具也是空user_agent
if(!$ua) {header("content-type: text/html; charset=utf-8");die('请勿采集本站,因为采集的站长木有小jj!');}else{foreach($now_ua as $value )//判断是否是数组中存在的uaif(eregi($value,$ua)) {header("content-type: text/html; charset=utf-8");die('请勿采集本站,因为采集的站长木有小jj!');}}
四、测试效果如果是vps,那非常简单,使用curl -a 模拟抓取即可,比如:
模拟宜搜蜘蛛抓取:
curl -i -a 'yisouspider' zhang.ge
模拟ua为空的抓取:
curl -i -a '' zhang.ge
模拟百度蜘蛛的抓取:
curl -i -a 'baiduspider' zhang.ge
修改网站目录下的.htaccess,添加如下代码即可(2种代码任选):三次抓取结果截图如下:
可以看出,宜搜蜘蛛和ua为空的返回是403禁止访问标识,而百度蜘蛛则成功返回200,说明生效!
补充:第二天,查看nginx日志的效果截图:①、ua信息为空的垃圾采集被拦截:
②、被禁止的ua被拦截:
因此,对于垃圾蜘蛛的收集,我们可以通过分析网站的访问日志,找出一些没见过的的蜘蛛(spider)名称,经过查询无误之后,可以将其加入到前文代码的禁止列表当中,起到禁止抓取的作用。
五、附录:ua收集下面是网络上常见的垃圾ua列表,仅供参考,同时也欢迎你来补充。
feeddemon 内容采集bot/0.1 (bot for jce) sql注入crawldaddy sql注入java 内容采集jullo 内容采集feedly 内容采集universalfeedparser 内容采集apachebench cc攻击器swiftbot 无用爬虫yandexbot 无用爬虫ahrefsbot 无用爬虫yisouspider 无用爬虫(已被uc神马搜索收购,此蜘蛛可以放开!)mj12bot 无用爬虫zmeu phpmyadmin 漏洞扫描winhttp 采集cc攻击easouspider 无用爬虫httpclient tcp攻击microsoft url control 扫描yyspider 无用爬虫jaunty wordpress爆破扫描器obot 无用爬虫python-urllib 内容采集indy library 扫描flightdeckreports bot 无用爬虫linguee bot 无用爬虫
以上就是php如何设置禁止抓取网站的详细内容。
其它类似信息

推荐信息