通过Filter抵御网页爬虫

2010-08-13 09:18刘庆杰孙旭光王小英
网络安全技术与应用 2010年1期
关键词:爬虫字段搜索引擎

刘庆杰 孙旭光 王小英

防灾科技学院信息工程系 河北 065201

0 前言

随着搜索引擎技术的流行,现在国内做搜索引擎的网络公司超过50家,带来的弊端就是,搜索引擎释放出来的网络爬虫大量的占用互联网的带宽。由于这些搜索引擎厂商投入差别巨大、技术参差不齐,加上监管空白,一旦一个中型规模的网站被一个技术糟糕的搜索引擎爬虫的抓取数据,很可能在短时间内导致网站访问速度缓慢,甚至完全无法访问。另外,还有相当多的网页爬虫目的是盗取内容,然后使用自己的发帖机器人将内容自动发表到自己的网站,制造自己网站的虚假PV。所以说,网络爬虫不仅影响网站的性能,而且很可能偷盗网站内容,侵犯知识产权,因此反网页爬虫是所有网站值得重视和长期探索的问题。

1 Filter抵御爬虫的实现原理

我们知道,对于网站来说,正常的用户请求是通过浏览器发送到服务器的,用户请求的Request中会携带大量用户端系统信息,其中就包括用户的浏览器厂商和版本字符串,存储在Request请求的Header的User-agent字段。而网络爬虫一般都是搜索引擎厂商开发出来的专门的工具软件,通过网络爬虫发送给服务器的请求中,User-agent字段是没有浏览器信息的,因此我们就可以通过记录和分析User-Agent信息来区分正常的用户请求和网页爬虫请求。一旦区分出来正常的用户请求和网页爬虫请求,我们就可以通过一个过滤器带策略对待正常请求和网页爬虫请求,从而这样就可以有效降网页爬虫对网站的负载。

既然我们可以通过分析Request请求中的User-agent字段区分用户器请求和爬虫请求,下面的问题就是如果在请求到达目标之前拦截这些请求,然后使用不同的策略对待。拦截所有的请求一般有两种做法,一种是重写网站服务器软件的入口方法,在该方法中实现传递用户请求、拦截网页爬虫的功能。此种做法要求开发人员必须深入了解网站服务器软件的内部结构,能够找到服务器处理请求的入口方法。既然如此,对于一些非开源的服务器软件,同样也是无能为力。第二种做法是,实现一个Filter,让该Filter过滤所有的请求,放行正常用户请求,拦截网页爬虫请求。

2 使用Filter实现爬虫拦截器

2.1 建立一个过滤类,该类实现javax.servlet.Filter接口,重写接口的三个方法

上面的三个方法,第一个方法用来在网站关闭的时候提前做一些保存性的工作;第二个方法就是我们的用户请求的总过滤器;第三个方法是服务器启动时候可以提前进行的一些初始化工作。

2.2 在doFilter()方法内部实现过滤策略

这个方法就是处理用户请求的总过滤器,下面就可以提供一套自定义的处理策略。当有请求到达服务器以后,服务器把请求全部转送到这里,分两种情况处理:

(1)普通的用户请求。调用请求传递器的doFilter(request,response)方法,将请求传递给被请求的资源处理。

(2)网页爬虫请求。根据实际应用的需要,如果网站只是针对特定用户的应用,不需要被搜索引擎检索,可以直接拒绝请求,避免网页爬虫对网站的骚扰;如果网站只是认为搜索引擎对网站的访问过于频繁,并不希望封锁搜索引擎的检索,可以通过延时加载请求的方式处理请求,减轻爬虫对网站的负担。

实现代码如下:

2.3 部署爬虫拦截器

部署一个Filter应用分两个步骤:

(1)编译该Filter,将得到的字节码文件DFCrawlerFilter.class放到%Tomcat_home%commonclasses目录下。

(2)在Web.xml文件中,添加该Filter的部署配置代码

3 结束语

网站反爬虫是一个长期和艰苦的过程,对于一些内容驱动型的网站或者依靠PV赚取广告费的网站来说,反爬虫是一个尴尬的话题,一方面希望通过搜索引擎的检索提高自己网站的知名度,获得更大的用户访问量;令一方面又不希望过多的搜索检索影响自己网站的性能;这种“又想马儿不吃草,又想马儿跑的快”的诉求,决定了反爬虫策略的复杂和多变。实际应用中,还有其它的通过IP过滤反爬虫、防火墙反爬虫、请求频率阀值设置反爬虫等其它的解决方案。如果我们的网站是针对特定用户使用的,例如:各种企业应用系统,本文提供的就是一个比较好的反爬虫策略。

[1] 马树奇.Servlet编程指南[M].北京:电子工业出版社.2007.

[2] 马伟锋.爬虫算法分析[M].北京:清华大学出版社.2008.

[3] Filer常规应用 [M].北京:高等教育出版社.2009.

猜你喜欢
爬虫字段搜索引擎
利用网络爬虫技术验证房地产灰犀牛之说
图书馆中文图书编目外包数据质量控制分析
基于Python的网络爬虫和反爬虫技术研究
大数据背景下校园舆情的爬虫应用研究
大数据环境下基于python的网络爬虫技术
网络搜索引擎亟待规范
CNMARC304字段和314字段责任附注方式解析
基于Nutch的医疗搜索引擎的研究与开发
无正题名文献著录方法评述
关于CNMARC的3--字段改革的必要性与可行性研究