防止爬虫(如何防止网站被爬虫爬取的几种办法)
一、如何防止网站被爬虫爬取的几种办法
相较于爬虫技术,反爬虫实际上更复杂。目前许多互联网企业都会花大力气进行“反爬虫”,网络爬虫不但会占据过多的网站流量,导致有真正需求的用户没法进入网站,另外也有可能会导致网站关键数据的外泄等现象。网络爬虫遍布互联网的各个角落,因此网络爬虫有好处也有坏处,接下来介绍一下和网络爬虫一同诞生的反爬虫技术,如何才能防止别人爬取自己的网站?
1、基于程序本身去防止爬取:作为爬虫程序,爬取行为是对页面的源文件爬取,如爬取静态页面的html代码,可以用jquery去模仿写html,这种方法伪装的页面就很难被爬取了,不过这种方法对程序员的要求很高。
2、基于iptables和shell脚本:可以对nginx的access.log进行策略定义,例如定义在1分钟内并发连接数超过30个ip为非法,如ip不在白名单内,则加入iptables策略封掉,当然这种的缺点是会有“误伤”,策略细粒度越小就会有更多的“误伤”,细粒度大就会使效果变差,另外还有类似的第三方工具fail2ban,利用做filter和actor对一些有危害的操作记录或是封ip。但是对于某个特定的爬虫地址(例如网易、有道)的爬取行为拒绝也很难准确做到,因为你无法准确知道这些特定的爬虫ip地址。注意:建议不要用封ip条目的方式,iptables列表长度是65535时就会封满,服务器也就会死机。
3.使用robots.txt文件:例如阻止所有的爬虫爬取,但是这种效果不是很明显。
User-agent:*
Disallow:/
4.使用nginx的自带功能:通过对httpuseragent阻塞来实现,包括GET/POST方式的请求,以nginx为例,具体步骤如下:
编辑nginx.conf
拒绝以wget方式的httpuseragent,增加如下内容
## Block http user agent- wget##
if($http_user_agent~*(Wget)){
return 403;
}
## Block Software download user agents##
if($http_user_agent~* LWP::Simple|BBBike|wget){
return 403;
平滑启动
#/usr/local/nginx/sbin/nginx-s reload
如何拒绝多种httpuseragent,内容如下:
if($http_user_agent~(agent1|agent2|Foo|Wget|Catall Spider|AcoiRobot)){
return 403;
}
大小写敏感匹配
###大小写敏感http user agent拒绝###
if($http_user_agent~(Catall Spider|AcoiRobot)){
return 403;
}
###大小写不敏感http user agent拒绝###
if($http_user_agent~*(foo|bar)){
return 403;
}
注意语法:~*表示是大小写不敏感,~表示是大小写敏感
}
以上就是预防网站信息被别人爬取的一些方法,大量的爬取行为会对web服务器的性能有影响,所以一定要注重反爬虫措施。
二、有什么好的方法可以防止网络爬虫进行数据抓取
要防止爬虫爬你的网站,就必须区分出爬虫和正常用户的行为区别。单单就单次请求你是无法区分出来的,因为前端的所有用户行为,爬虫都可以模拟。所以比较通用的做法是统计单个IP在一定时间范围内的请求数量,超过了一定的量就认为是爬虫,把它阻断掉。也许你自己有压测程序,把他们加入白名单就可以了。当然,这样并不能就真的可以阻断爬虫了,因为道高一尺魔高一丈呀,就我知道的一个爬虫他们准备了200台手机和手机卡,同一时间100台同时爬,因为用的手机卡,你看到的IP基本都是不一样的,爬2分钟断网,另100台爬,IP就又变了,断网的手机卡再联网IP也基本会变,所以基本就是达到了一个IP爬两分钟就自动换了一个IP,他们也会根据你统计的时间限制来调整他们的时间,所以统计IP这一招再这个方法中就不行了。对于不需要登录的页面什么cookie,agent,jwt等等都是可以对付的,所以就必须加入其他因素,比如同一个IP在最近的N个独立页面的请求平均间隔时间,如果都是小于1秒就可以认定不是自然人在请求,因为自然人速度没这么快。再比如同一个IP在最近的N个请求里面不存在合理的请求顺序,因为爬虫一般是拿了一个页面以后按顺序再请求里面的链接,而自然人不会这样等等的规则,这些规则看上去就比较复杂了,需要根据自己的业务去指定,然后异步的去判断,防止影响正常的请求速度。
这里只提供一种思路,希望对你有帮助。
三、如何设置让网站禁止被爬虫收录
网站建设好了,当然是希望网页被搜索引擎收录的越多越好,但有时候我们也会碰到网站不需要被搜索引擎收录的情况。
比如,要启用一个新的域名做镜像网站,主要用于PPC的推广,这个时候就要想办法屏蔽搜索引擎蜘蛛抓取和索引我们镜像网站的所有网页。因为如果镜像网站也被搜索引擎收录的话,很有可能会影响官网在搜索引擎的权重。
以下列举了屏蔽主流搜索引擎爬虫(蜘蛛)抓取/索引/收录网页的几种思路。注意:是整站屏蔽,而且是尽可能的屏蔽掉所有主流搜索引擎的爬虫(蜘蛛)。
1、通过 robots.txt文件屏蔽
可以说 robots.txt文件是最重要的一种渠道(能和搜索引擎建立直接对话),给出以下建议:
User-agent: Baiduspider
Disallow:/
User-agent: Googlebot
Disallow:/
User-agent: Googlebot-Mobile
Disallow:/
User-agent: Googlebot-Image
Disallow:/
User-agent: Mediapartners-Google
Disallow:/
User-agent: Adsbot-Google
Disallow:/
User-agent:Feedfetcher-Google
Disallow:/
User-agent: Yahoo! Slurp
Disallow:/
User-agent: Yahoo! Slurp China
Disallow:/
User-agent: Yahoo!-AdCrawler
Disallow:/
User-agent: YoudaoBot
Disallow:/
User-agent: Sosospider
Disallow:/
User-agent: Sogou spider
Disallow:/
User-agent: Sogou web spider
Disallow:/
User-agent: MSNBot
Disallow:/
User-agent: ia_archiver
Disallow:/
User-agent: Tomato Bot
Disallow:/
User-agent:*
Disallow:/
2、通过 meta tag屏蔽
在所有的网页头部文件添加,添加如下语句:
<meta name="robots" content="noindex, nofollow">
3、通过服务器(如:Linux/nginx)配置文件设置
直接过滤 spider/robots的IP段。
小注:第1招和第2招只对“君子”有效,防止“小人”要用到第3招(“君子”和“小人”分别泛指指遵守与不遵守 robots.txt协议的 spider/robots),所以网站上线之后要不断跟踪分析日志,筛选出这些 badbot的ip,然后屏蔽之。