昨天访问实验室的一个网站,突然发现打开速度巨慢,甚至无法打开!心里顿时大惊。Ping服务器的ip,一切正常;FTP连接,一切正常。于是赶紧通过远程桌面连接服务器,查看网站日志,才发现有一些124.115.4.*、124.115.0.*和58.60.14.*的ip在大量连接网站,网站的访问日志“唰唰唰”地“飞奔”,何其壮观!
4 Q" S& p& \3 [4 p' z/ e+ J: N1 u, _
0 P* ]& ~2 X: A7 s; D+ z我立刻意识到是那个惹人厌的Sosospider爬虫(这些ip段为soso的爬虫,是从网上查询到的,未必确凿,但是其爬取方式与表明身份的Sosospider类似,以下假定这些爬虫是soso的)又来了,这个爬虫具有如下特点:" K1 b1 o* c6 s
9 T8 ]6 F0 [2 ]; ^+ N
(1)每次几十个爬虫同时爬取网站,没有间隔,持续抓取。这点极为过分!Sosospider难道以为所有的主机都是架设在云计算平台上的啊?!根本不考虑一般主机的承受能力,多线程爬取,无节制爬取,占用大量带宽,损耗大量流量!这也是为什么Sosospider在网上遭受这么多指责的最主要原因。像网络蠕虫一样讨厌!
) b2 D9 O- a" ~/ ^; p8 o: x8 \6 N8 Y$ _- w9 t% c" C
(2)在爬取日志中Referer不为空,并且与其Request-URI一致。例如,以下是一条典型的Sosospider的爬取日志:
& q6 {' f8 x( f- L
2 C* X- `( w: g* m! L121.14.96.153 - - [03/Dec/2008:14:20:11 +0800] "GET / HTTP/1.1" 200 4256 "http://www.wangzhongyuan.com/" "Mozilla/4.0 (compatible; MSIE 6.0)") ?! W9 v3 V: W8 H
1 ]! x- T) A3 q Sosospider与其它爬虫不同,它不会将Referer留空,而是会写上待爬取的URL,这样初看之下让人误以为是正常访问日志。# }, F/ J+ h. U7 f( C- o
: f, A" f# @$ r- \$ R" c' c
(3)不读取robots.txt。虽然在Soso网站的声明页中,说Sosospider会遵从Robots.txt的协议,但是实践证明,在User-Agent中标明了Sosospider的爬虫会定期(或许是几天)读取一次robots.txt,但是似乎这个会读取robots.txt的爬虫根本控制不了其他爬虫,尤其是那些在User-Agent字段里完全不标明Sosospider的爬虫。它们完全不理会robots.txt中禁止访问的页面,照爬取不误。
8 {) Z' k9 d# i- l* x5 c5 w1 t
" ~4 \! Y, K6 [8 m4 d9 q N(4)在User-Agent字段中,大部分的soso爬虫都不标明自己的身份。通常就如第二点中所显示的一样,直接标明"Mozilla/4.0 (compatible; MSIE 6.0)",这点也是极不道德的。似乎Sosospider有着分裂的“人格”。, `# v# U* w$ M2 j
0 z* c& _8 l: o6 ~
那么,对付这样的爬虫,除了封杀,我们还能做什么呢?+ }: m1 a* y- q
- p6 S+ \5 ^5 `. c
如果你使用的是Apache来提供Web服务,那么可以在Order deny,allow中加入对于这些ip段的访问控制。我曾经在《Apache下进行Web页面访问权限控制》一文中做过详细介绍。以下是我在Apache上设置的访问控制代码,供大家参考:7 k+ j5 x4 {, a9 H( l
; G# X# W ^* F" r! F8 m2 L<Directory "/XXX/XXX/XXX">+ i5 T+ L# S o
Options None' F5 y5 t- m) y3 o: y
AllowOverride ALL
. r9 n# Y$ { ^$ _ Order Deny,Allow
" v2 B, a" j% @( ?) o' z8 z' j Deny from 124.115.4. 124.115.0. 64.69.34.135 216.240.136.125 218.15.197.69 155.69.160.99 58.60.13. 121.14.96. 58.60.14. 58.61.164. 202.108.7.209
7 Q3 ~4 m A$ ?. f8 S% `6 A</Directory>7 z% x( s0 R7 N2 g# u$ {
+ h, A6 B3 |! p% }* [9 S0 E+ ]修改完httpd.conf之后,重启一下Apache服务器。发现打算速度巨快,终于恢复了正常的水平了,整个世界清静了~
( f# \! D; G0 T* Q2 v6 p: F- \" T! f$ `) c0 [
如果有一天,Soso搜索引擎的技术工程师能够看到这篇文章,希望你们好好管管你们的Spider,不能只学习Google的爬取能力,更要学习Google对于爬虫的调度能力! |