Facebook 和 Robots.txt 中的抓取延迟?

问题描述 投票:0回答:6

Facebook 的网络爬虫机器人是否尊重 Crawl-delay:

 文件中的 
robots.txt
 指令?

facebook seo robots.txt
6个回答
16
投票

不,它不尊重 robots.txt

与这里的其他答案相反,facebookexternalhit 的行为就像最卑鄙的爬虫。 当它以疯狂的速度遍历每一个时,无论它是通过爬行还是从类似的按钮获得请求的网址,都不再那么重要了。

我们有时每秒会获得数百次点击,因为它几乎遍历我们网站上的每个网址。 它每次都会杀死我们的服务器。 有趣的是,当这种情况发生时,我们可以看到 Googlebot 会放慢速度并等待事情稳定下来,然后再慢慢恢复。 另一方面,facebookexternalhit 继续攻击我们的服务器,通常比最初杀死我们的那场比赛更严重。

仅仅因为 facebookexternalhit,我们就必须运行比我们实际流量所需的更强大的服务器。 我们进行了大量的搜索,但找不到减慢速度的方法。

Facebook,这是一个很好的用户体验吗?


6
投票

对于类似的问题,我提供了一种技术解决方案,可以根据用户代理简单地限制负载速率。

为方便起见,此处重复代码:

既然人们无法迎合他们的狂妄自大,并且放弃他们的 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;
    }
}

3
投票

Facebook 实际上使用了这个算法,你可以在这里亲自检查:

http://developers.facebook.com/tools/debug

此数据的 Facebook 缓存寿命是可变的,但根据我的经验,它在 24-48 小时之间。

但是,如果您向网址添加一部分以便用户共享新的网址,您可以使缓存“无效”,或者您可以提供具有相同效果的 bit.ly(等)链接。

由于它实际上并不是在爬行,所以您不能强迫它延迟抓取(而且您不应该这样做,因为这会造成糟糕的用户体验 - 他们会等待一段时间才能抓取完成,并且会向他们提供可共享的内容)链接不太漂亮)。但是,您可以按照设定的时间间隔手动触发抓取,以确保更好的用户体验(他们不会等待数据被缓存)和服务器负载平衡。


0
投票

如果您在 ubuntu 服务器上运行并且正在使用 ufw 防火墙,您可能想尝试一下

ufw 限制原始 tcp 从 31.13.24.0/21 端口 80 到任何

对于所有这些 IP 地址: 31.13.24.0/21 31.13.64.0/18 66.220.144.0/20 69.63.176.0/20 69.171.224.0/19 74.119.76.0/22 103.4.96.0/22 173.252.64.0/18 204.15.20.0/22

如图所示: Facebook 的 Open Graph 爬虫的 IP 地址范围是多少?


0
投票

哇这么多年过去了,这一切仍然有意义。 Facebookexternalhit 仍然是一个坏演员。 他们肯定是根据我们的日志进行爬行的。如果他们使用不同的 UA 来处理事务元数据而不是爬行,这一切都会容易得多!

我们正在与 googlebot、现在的 googleother 和 facebookexternalhit 打交道,它们都在争夺我们服务器资源的主导权。 到目前为止,所有通过联系公司解决问题的尝试都已进入 /dev/null - 让我们唯一的选择是阻止他们的整个 ASN - 一点也不酷!


-5
投票

我们没有爬行器。我们有一个抓取工具,可以抓取具有类似按钮/在 FB 上共享的页面上的元数据。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.