Facebook的网络浏览机器人是否尊重robots.txt
个文件中的Crawl-delay:
指令?
答案 0 :(得分:11)
不,它不尊重robots.txt
与此处的其他答案相反,facebookexternalhit的行为类似于最卑鄙的爬虫。无论是通过抓取还是从类似按钮获取的网址都是如此,当它以疯狂的速度通过每一个时都无关紧要。
我们有时会获得几百次点击,因为它几乎遍布我们网站上的每个网址。它每次都会杀死我们的服务器。有趣的是,当发生这种情况时,我们可以看到Googlebot放慢速度并等待事情稳定下来然后慢慢恢复。另一方面,facebookexternalhit继续砸我们的服务器,通常比杀死我们的最初回合更难。
我们必须运行比我们实际需要的更强大的服务器,因为facebookexternalhit。我们已经进行了大量的搜索,无法找到减慢速度的方法。
Facebook的用户体验如何?
答案 1 :(得分:5)
For a similar question,我提供了一种技术解决方案,只需根据用户代理对速率进行限速。
为方便起见,此处重复了代码:
由于一个人无法吸引他们的狂妄自大,而且他们的IP块的DROP非常严苛,这是我的技术解决方案。
在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;
}
}
答案 2 :(得分:2)
Facebook实际上使用的算法可以在这里查看:
http://developers.facebook.com/tools/debug
此数据的Facebook缓存生命周期是可变的,但根据我的经验,它在24-48小时之间。
但是,如果您在网址中添加一部分以便用户共享新部分,则可以使缓存“无效”,或者您可以提供具有相同效果的bit.ly(等)链接
由于它实际上并没有爬行,你不能强迫它延迟刮擦(你不应该,因为这会造成糟糕的用户体验 - 他们会等待一段时间让刮刀完成并且他们会被提供一个不太漂亮的可共享链接。但是,您可以按设定的时间间隔手动触发抓取,以确保更好的用户体验(他们不会等待缓存数据)和服务器负载平衡。
答案 3 :(得分:0)
我们没有抓取工具。我们有一个刮刀,可以在FB上共享类似按钮/的页面上擦除元数据。
答案 4 :(得分:0)
如果您在ubuntu服务器上运行并且使用的是ufw防火墙,则可能需要尝试
ufw将proto 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
如下所示: What's the IP address range of Facebook's Open Graph crawler?