Facebook的网络爬虫机器人是否遵守robots.txt文件中的Crawl-delay:指令?
发布于 2011-10-18 01:41:33
我们没有爬虫。我们有一个抓取器,它可以抓取页面上的元数据,这些页面有类似的按钮/在FB上共享。
发布于 2012-02-07 02:27:02
不,它不尊重robots.txt
与这里的其他答案相反,crawlers外部命中的行为就像是最卑劣的爬虫。当它以疯狂的速度浏览每一个urls时,它是从爬行还是从like按钮获得它所请求的urls并不那么重要。
我们有时每秒会得到几百次点击,因为它几乎遍历了我们网站上的每个url。它每次都会杀死我们的服务器。有趣的是,当这种情况发生时,我们可以看到Googlebot会放慢速度,等待事情稳定下来,然后再慢慢恢复。另一方面,facebookexternalhit继续冲击我们的服务器,通常比最初杀死我们的那一轮更猛烈。
我们不得不运行比我们实际需要的流量更强大的服务器,这仅仅是因为for外部的点击。我们已经做了大量的搜索,但找不到一种方法来拖慢他们的速度。
Facebook,这怎么是一个好的用户体验呢?
发布于 2012-11-08 03:30:32
For a similar question,我提供了一个简单的基于用户代理的速率限制负载的技术解决方案。
为了方便起见,在这里重复代码:
由于人们无法迎合他们的傲慢,而且丢弃他们的IP阻止是相当严厉的,这里是我的技术解决方案。
在PHP中,对每个请求尽可能快地执行以下代码。
define( 'FACEBOOK_REQUEST_THROTTLE', 2.0 ); // Number of seconds permitted between each hit from facebookexternalhit
if( !empty( $_SERVER['HTTP_USER_AGENT'] ) && preg_match( '/^facebookexternalhit/', $_SERVER['HTTP_USER_AGENT'] ) ) {
    $fbTmpFile = sys_get_temp_dir().'/facebookexternalhit.txt';
    if( $fh = fopen( $fbTmpFile, 'c+' ) ) {
        $lastTime = fread( $fh, 100 );
        $microTime = microtime( TRUE );
        // check current microtime with microtime of last access
        if( $microTime - $lastTime < FACEBOOK_REQUEST_THROTTLE ) {
            // bail if requests are coming too quickly with http 503 Service Unavailable
            header( $_SERVER["SERVER_PROTOCOL"].' 503' );
            die;
        } else {
            // write out the microsecond time of last access
            rewind( $fh );
            fwrite( $fh, $microTime );
        }
        fclose( $fh );
    } else {
        header( $_SERVER["SERVER_PROTOCOL"].' 503' );
        die;
    }
}https://stackoverflow.com/questions/7716531
复制相似问题