Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Browser 如何检查是否正在使用爬虫访问我的网站?_Browser_Web Crawler - Fatal编程技术网

Browser 如何检查是否正在使用爬虫访问我的网站?

Browser 如何检查是否正在使用爬虫访问我的网站?,browser,web-crawler,Browser,Web Crawler,如何检查某个页面是否正在从爬虫程序或引发连续请求的脚本访问? 我需要确保该网站只能通过web浏览器访问。 谢谢。您可以使用robots.txt文件阻止对爬虫的访问,也可以使用javascript检测浏览器代理,并基于此进行切换。如果我理解第一种选择更合适,那么: User-agent: * Disallow: / 将其保存为站点根目录下的robots.txt,任何自动系统都不应检查您的站点。这个问题是一个很好的起点: 原职: 这需要一点时间来设计解决方案 我可以马上想到三件事: 一是用户代理

如何检查某个页面是否正在从爬虫程序或引发连续请求的脚本访问?
我需要确保该网站只能通过web浏览器访问。
谢谢。

您可以使用robots.txt文件阻止对爬虫的访问,也可以使用javascript检测浏览器代理,并基于此进行切换。如果我理解第一种选择更合适,那么:

User-agent: *
Disallow: /

将其保存为站点根目录下的robots.txt,任何自动系统都不应检查您的站点。

这个问题是一个很好的起点:

原职:

这需要一点时间来设计解决方案

我可以马上想到三件事:

一是用户代理。如果蜘蛛是谷歌、bing或其他任何东西,它会识别自己

第二,如果爬行器是恶意的,它很可能会模拟普通浏览器的头。如果是IE,请用手指打印。使用JavaScript检查活动的X对象


第三,记下它访问的内容以及访问的频率。如果内容的浏览时间平均为人类X秒,那么在尝试确定是否有可能以如此快的速度消耗数据时,您可以将其作为一个起点。这很棘手,你很可能不得不依赖cookies。一个IP可以由多个用户共享。

我的web应用程序中也有类似的问题,因为我在数据库中为浏览网站的每个用户创建了一些庞大的数据,爬虫程序会引发大量无用数据的创建。然而,我不想拒绝访问爬虫,因为我想我的网站索引和发现;我只是想避免创建无用的数据,减少爬行所需的时间

我用以下方法解决了这个问题:

  • 首先,我使用了.NET Framework(自2.0以来)中的属性,该属性指示浏览器是否是搜索引擎Web爬虫。您可以从代码中的任何位置访问它:

    • ASP.NET C#代码隐藏:

      bool isCrawler = HttpContext.Current.Request.Browser.Crawler;
    • ASP.NET HTML:

      Is crawler? = <%=HttpContext.Current.Request.Browser.Crawler %>
      是爬虫吗?=
    • ASP.NET Javascript:

      <script type="text/javascript">  
      var isCrawler = <%=HttpContext.Current.Request.Browser.Crawler.ToString().ToLower() %>  
      </script>
      
      var isCrawler=
      
    这种方法的问题是,它对未识别或屏蔽的爬虫不是100%可靠的,但在您的情况下可能是有用的

  • 在那之后,我必须找到一种方法来区分自动机器人(爬虫、屏幕抓取器等)和人类,我意识到解决方案需要某种互动,比如点击按钮。有些爬虫确实处理javascript,很明显,它们会使用button元素的onclick事件,但如果它是一个非交互元素(如div),则不会。下面是我在web应用程序中用于实现此功能的HTML/javascript代码:

    <div  
    class="all rndCorner"  
    style="cursor:pointer;border:3;border-style:groove;text-align:center;font-size:medium;font-weight:bold"  
    onclick="$TodoApp.$AddSampleTree()">  
    Please click here to create your own set of sample tasks to do  
    </div>
    
    请单击此处创建您自己的示例任务集
    
    直到现在,这种方法一直工作得无可挑剔,尽管爬虫程序可能会变得更加聪明,也许在阅读本文之后:D


大概任何欺骗用户代理的代码都可以绕过这个问题?请注意,绝对不能保证爬行器/机器人会监听
robots.txt
。我相信大多数爬行器不会处理JavaScript,因此任何使用JavaScript(如谷歌分析)的解决方案都不会跟踪爬行器。谢谢,但是我想如果我创建一个从0到1000的循环,在循环中我会向某个网站发起一个请求!这将是一个问题。这就是我想要避免的,我不知道爬虫程序大多不处理JavaScript。谢谢你的提醒!至于他们忽略机器人文件,大多数主流爬虫应该观察它,但你的权利不是万无一失的。欺骗用户代理不会影响这一点,因为它是否尊重该文件取决于爬虫本身。“确保仅从web浏览器访问该网站”可以转换为“确保该网站仅由人访问”。这个图灵测试看起来几乎不可能解决,但现在你可以称之为IBM