August 26, 2008

反采集、反蜘蛛的个人心得体会

一、背景

2002年开始了我的小站,经过朋友们的捧场,每天的流量日渐增长,后来发现每当中午我的空间就不能正常访问了,打电话询问 空间服务提供商,原来是空间服务提供商为了节省带宽,给各种类型的用户限制了流量每天断流的情况,告诉我的B型空间每日流量不能超过300M,我问到是什 么占用我流量时,空间服务提供商告诉我说大部分流量来源于搜索引擎。可恶的搜索引擎!怎么不让我的网站内容被蜘蛛抓取呢?当时我这么想。后来随着原创文章 数的增多,导致文章被转贴、采集、附件经常被盗链,这些也成为了日益需要解决的问题。


二、 基础概念

其实最简单的单元就是程序代码,程序代码构造了程序,比如简单的抓取 wget 程序,比如我要抓取天空软件站的 创新英语单词通 ,直接在命令行:
wget 'http://jlbc.skycn.com/down/recite.rar' --referer='http://www.skycn.com/soft/31870.html'
这样就能抓取到天空软件站的这个软件。很多的程序构造起来,给定了一定的名称,富有更多的功能,这样升级成爬虫或者蜘蛛,又称机器人,像Yahoo! Slurp China,baiduspider,Google bot等等。


三、 解决之道

方案一,环境变量

  • 根据系统环境变量,我们可以指定蜘蛛该收录一些什么不收录一些什么,提高需采集的技术难度。
  • 使用 HTTP_USER_AGENT 指定蜘蛛类型以及识别蜘蛛和非蜘蛛抓取,根据其类型反应出不同的内容;
  • 使用 HTTP_ACCEPT_LANGUAGE 可以识别基本的套接字类抓取以及蜘蛛和非蜘蛛,毕竟采集机器人能识别语种的占少数,像本人的主站点使用的就是这个参数;
  • 使用 HTTP_REFERER 可以侦测盗链状况,如果referer来源不是本站或者指定的站点,跳转或者指向其他页面,本人站点的处理防止图片盗链的方法就是一种高级的利用referer反盗链方法,然后引导到一个字节很小的页面;
  • 使用 REMOTE_PORT 记录蜘蛛的地址,缓存起来,可以直接屏蔽该地址,杜绝采集或者针对搜索引擎进行优化;
  • 使用 HTTP认证 来屏蔽匿名蜘蛛的抓取;

方案二,程序本身控制

  • 深究网站频繁访问以及大量被采集,主要还是自身网站程序原因导致。
  • 更改目录 是一种比较土的办法,但是非常使用有效,编写程序拥有自动在一段时间某个ip频繁访问的情况下,自动更换目录路径,这样减少外界机器人的频繁访问;
  • 提升网站本身的权限 ,比如需要注册ID访问,每个ID对应于不同的权限;或是根据IP加时间结合的方法进行访问控制等;
  • 使用隐藏文字 方式进行干扰,比如用CSS的DIsplay:none,或者直接把字体颜色和背景颜色一致,这样采集者要分离文章需要大量的时间处理,比如我的BBS论坛使用的就是此方式;
  • Javascript 的干扰,目前一般很少有人使用此方式来做站,估计大部分站长考虑到搜索引擎解析Javascript差,担心不会被收录的问题;本人的站点就是比较另类的一个,用JS作为输出,所有的正文全部在JS里面;
  • XML 化的页面是比较难被蜘蛛所识别,特别是Javascript+Xml化后,使用了ajax技术,即保证了速度,又保护了有效的数据,这种类型的网站还没有蜘蛛能够完全的解析,像澳门官方体彩网站;

方案三,网站结构

  • 网站结构可以很大的影响采集以及搜索引擎收录。
  • 网站图片化 早些年,一些很精美的韩国模板都是图片拼成的,像IKdiary
  • Flash 结构的网站,一些高超的闪客把一些动态页面全部用flash绘制而成,简直就是蜘蛛的克星;
  • 使用非80端口的更安全协议 比如HTTPS协议,虽然成本比较高,但是也是防止匿名蜘蛛抓取的好办法;


四、 后记

从 搜索引擎的出发点来看,上面的方法与之背道而驰,不管怎样,我们的目的是做一个站,做站就是做的有特色,保留自己网站上的特色,把精髓奉献给大家,这就是 互联网的初衷。而随着互连网的日益壮大,采集已经成为一个普遍的问题,区区已抛砖引玉,把过度蜘蛛抓取的解决的办法一一告诉大家,希望大家能有更多的想法 一起讨论噢。

April 28, 2008

antispam开张了

Project Homepage: http://code.google.com/p/antispam2010/
svn: svn checkout http://antispam2010.googlecode.com/svn/trunk/ antispam2010-read-only