如何在2016年排除机器人和抓取工具的同时收集网页浏览量?

gdo*_*ica 7 .net html javascript asp.net bots

我们希望将页面视图计数器添加到我们的文章页面(就像在Stackoverflow中一样),但我们不想添加机器人和抓取工具的页面视图.

我搜索了很多,只发现了一个非常过时的答案,说要解雇一个AJAX请求,因为爬虫和机器人不执行javascript ......好吧,它是2016年......我相信所有主要的抓取工具现在都执行javascript.

我想到了两个可行的解决方案:

  1. 保留服务器上所有已知机器人和爬虫用户代理的列表,并且只有在请求不属于其中之一时才增加计数器(由于列表需要定期维护和更新,因此似乎是一个非常糟糕的解决方案,并且可能会有许多列表不会捕获).
  2. 使用AJAX向不允许的端点发送请求robots.txt.(或带有隐藏的图像src="/article/track/?id=xxxxx")

第二个选项每页创建另一个请求,并不可怕,但也许有更好的方法?今天处理这个问题的常见方法是什么?

如果重要,使用ASP.NET Core并将页面视图存储在redis中

gdo*_*ica 4

我发现 Stackoverflow 自己是如何处理它的:

<script>
    StackExchange.ready(function(){$.get('/posts/40008735/ivc/e079');});
</script>
<noscript>
    <div>
        <img src="/posts/40008735/ivc/e079" class="dno" alt="" width="0" height="0">
    </div>
</noscript>
Run Code Online (Sandbox Code Playgroud)

在 robots.txt 中:

Disallow: /*/ivc/*
...
User-agent: Googlebot-Image
Disallow: /*/ivc/*
Run Code Online (Sandbox Code Playgroud)

所以基本上,他们按照我在选项 2 中建议的方式处理它:

发出 AJAX 请求(或者在禁用 javascript 的情况下使用隐藏的 img)并指示爬虫和机器人不要爬行该 URL Disallow