当前位置

屏蔽采集者专门进行站内搜索的爬虫

James Qi 在 2015年11月4日 - 11:54 提交
内容摘要:网站内容抓取采集真是中国互联网的一大特色,我们做了这么多年网站,一直都遇到各种各样对我们内容进行采集、复制的家伙。前一阵子发现一个网站 www.postcodequery.com 具体和我们的 www......

  网站内容抓取采集真是中国互联网的一大特色,我们做了这么多年网站,一直都遇到各种各样对我们内容进行采集、复制的家伙。前一阵子发现一个网站 www.postcodequery.com 具体和我们的 www.postcodebase.com 几乎内容一样,也真是煞费苦心。no

  另外近期在搬迁一些Wiki网站到云服务器上的时候,发现RDS会急剧升高、卡死,从MySQL进程来看是一些内部搜索语句造成的,显然正常的访问者搜索不会这么多、这么快,只能是机器人采集才会这样,当时来不及查就临时把内部搜索功能关闭了。

  但关闭功能毕竟不是长久之计,今天早上再次排查、处理,过程如下:

  1. 修改MediaWiki的LocalSettings.php,打开搜索功能;
  2. 观察RDS进程情况,找到明显增多、堆积的语句,例如:SELECT /* SearchMySQL::searchInternal 183.64.229.38 */  page_id,page_namespace,page_title  FROM `page`,`searchindex`   WHERE (page_id=si_page) AND ( MATCH(si_title) AGAINST('+\"u8xxxxxx u8xxxxxx\" ' IN BOOLEAN MODE) ) AND page_namespace = '0'  LIMIT 100 
  3. 在apache日志access.log中找到以上IP访问的记录,会发现很多都是搜索,例如:http://shandong.mingluji.com/index.php?limit=100&title=%E7%89%B9%E6%AE%8... ,这种站内搜索非常消耗资源,普通访问者偶尔搜索不会对数据库服务器造成负担,但快速大量的机器搜索会让数据库服务器的内存、CPU耗尽从而变慢、连接数超过限制;
  4. 用apache rewrite的办法修改.htaccess或者httpd.conf,对上述访问特征进行屏蔽,具体写法请自行根据情况决定并查资料参考apache rewrite用法;
  5. 屏蔽之前已经导致RDS负载过高,一些进程杀死后成为killed但依然短期不消失,只好重启RDS恢复。

  另外,我们使用了几年的反采集程序确实能起到一定作用,但有的情况下它本身也会造成数据库负载过高,我还在考虑是否修改优化或者简化功能甚至取消。