【问题标题】:Symfony2 spiders/bot/crawler prevention for statisticsSymfony2 蜘蛛/机器人/爬虫预防统计
【发布时间】:2016-10-25 08:39:02
【问题描述】:

所以我试图在我的控制器/树枝中创建一些跟踪服务,但我也试图绕过所有的爬虫/蜘蛛/机器人/不管调用它。

在我的控制器中,如果用户已经访问过该页面,我会呈现一个缓存视图,但机器人不遵守此规则,因为它们在重新启动后会“清除”所有内容,因此我的跟踪正在增加不受控制的数字.

我想知道是否有任何方法可以防止这种情况发生,所以即使我的网站正在被抓取(这种情况经常发生),我的统计数据也保持稳定。

我在这里不写任何代码,因为它做了什么并不重要,只是一些 MongoDB 插入。

我这样做是为了在用户访问页面时缓存响应,并在项目发生更改时禁用缓存 ($lastmodified)。

$response = new Response();
$response->setPublic();
$response->setMaxAge(0);
$response->setSharedMaxAge(600);
$response->setLastModified($lastmodified);
$response->headers->set('X-Cache-Type','client-no-cache');
if($response->isNotModified($request)){
    $response->setContent(304);

    return $response;
}

【问题讨论】:

  • 您要归档的内容不是很清楚。你想让爬虫使用缓存还是防止爬虫访问网站时收集一些统计信息?
  • 我想让爬虫使用缓存,或者如果我检测到它是爬虫就禁用服务调用以防止虚假统计

标签: php symfony caching web-crawler


【解决方案1】:
  1. 我想说首先你需要检测其他用户的爬虫。 我建议use this approachthis library 来做这个。您将创建一个请求侦听器并通过用户代理检测请求者是否是爬虫。您将能够将参数$isCrawler 注入到您的任何控制器中。请告诉您是否需要更多信息如何做到这一点(但从链接中很清楚)

类似这样的:

public function indexAction(Request $request, $isCrawler) {
   ....
   if (!$isCrawler) {
      $this->get('statisticService')->doSomething();
   }
}
  1. 至于缓存,我认为这是一个无关的话题。但是你可以让爬虫使用缓存。为此,您需要安装自己的反向代理(例如 Varnish,但即使是开箱即用的 Symfony 也有实现,请参阅documentation)。

但在这种情况下,即使是非爬虫用户也会使用缓存,而您的统计数据会丢失有关它的数据。再次,您将需要制作类似

的内容
if($response->isNotModified($request) && !$isCrawler){
    $response->setContent(304);

    return $response;
}

【讨论】:

    【解决方案2】:

    您如何检测爬虫/蜘蛛?如果响应是通过User-Agent 请求头属性,您可以使用Restrict Route Matching through Conditions 作为示例:

    routing.yml

    /contact
        defaults: { _controller: AcmeDemoBundle:Main:contact }
        condition: "context.getMethod() in ['GET'] and request.headers.get('User-Agent') matches '/firefox/i'"
    
    /contact
        defaults: { _controller: AcmeDemoBundle:Main:contactForCrawler }
        condition: "context.getMethod() in ['GET']"
    

    这个例子为同一个 URL 定义了两个动作的控制器:一个只为 Firefox 浏览器服务,另一个为所有其他User-Agent 条件服务。

    希望有帮助

    【讨论】:

      猜你喜欢
      • 2012-08-29
      • 1970-01-01
      • 2017-09-11
      • 2010-12-03
      • 1970-01-01
      • 2013-11-30
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多