当前位置

修改Drupal的xmlsitemap模块来控制搜索引擎爬取网站地图速度

James Qi 在 2016年2月2日 - 16:40 提交
内容摘要:以前托管服务器或者租用的服务器一般都是100M共享的带宽,很少出现机器带宽被占满的情况,去年开始采用阿里云平台后,带宽就是一个不得不考虑的成本因素,我们一般都是每台ECS购买的10M左右带宽,每年费用......

  以前托管服务器或者租用的服务器一般都是100M共享的带宽,很少出现机器带宽被占满的情况,去年开始采用阿里云平台后,带宽就是一个不得不考虑的成本因素,我们一般都是每台ECS购买的10M左右带宽,每年费用已经不少了,而投入使用后很轻易就会被占满,关键是网站的流量并没有特别提升,广告收入没有增加,成本却在大幅提高,还导致正常用户访问变慢、困难。

  同事在Linux服务器上安装了一个iftop来查看带宽占用情况,很容易就发现了是搜索引擎的爬虫抓取sitemap.xml这样的网址占用了很大带宽,我们网站系列多、页面多、还有多语言或者手机版,网站地图就特别的多,如果爬虫来得过于频繁就给我们不小困扰。

  但爬虫这种抓取活动还不宜直接屏蔽以免影响收录,所以考虑限制抓取速度的办法,安装了apache的mod_bw模块,还没有调试好,不过在网上搜索到文章说可以用PHP编程来实现控制下载速度,这个对我启发还比较大,因为我们正好修改过Drupal的xmlsitemap模块xmlsitemap.pages.inc文件来改变网站地图中的内容和格式,只要再把输出方式改一点、增加一点sleep循环就可以,代码如下:

//print $content;
$rate_limit = 1024*100;//100kb/s
$all_length = strlen($content);
$loop_number = ceil($all_length / $rate_limit);
for ($loop_count=0;$loop_count<$loop_number;$loop_count++) {
        $content_1_loop = substr($content,$loop_count*$rate_limit,$rate_limit);
        print $content_1_loop;
        sleep(1);
}

  这样每输出100K字节就延时1秒,把下载速度控制为100kb/s,实际测试可以达到目的,也不影响其内容,仅限制速度。