【问题标题】:how to check if my website is being accessed using a crawler?如何检查我的网站是否正在使用爬虫访问?
【发布时间】:2011-07-05 08:14:58
【问题描述】:

如何检查某个页面是否被爬虫或触发连续请求的脚本访问? 我需要确保仅从网络浏览器访问该站点。 谢谢。

【问题讨论】:

标签: browser web-crawler


【解决方案1】:

这个问题是一个很好的起点: Detecting 'stealth' web-crawlers

原帖:

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

我可以马上想到三件事:

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

第二,如果蜘蛛是恶意的,它很可能会模仿普通浏览器的标题。指纹它,如果它是IE。使用 JavaScript 检查活动的 X 对象。

三,注意它正在访问什么以及访问的频率。如果内容需要人类平均 X 秒的时间才能查看,那么您可以将其作为开始尝试确定人类是否可以快速使用数据的起点。这很棘手,您很可能不得不依赖 cookie。一个 IP 可以由多个用户共享。

【讨论】:

    【解决方案2】:

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

    User-agent: *
    Disallow: /
    

    将其保存为站点根目录下的 robots.txt,没有自动系统会检查您的站点。

    【讨论】:

    • 大概任何欺骗用户代理的代码都能够绕过这个?
    • 请注意,绝对没有保证蜘蛛/机器人会听robots.txt。
    • 我相信大多数爬虫都不处理 JavaScript,因此任何使用 JavaScript 的解决方案(例如 Google Analytics)都不会跟踪爬虫。
    • 谢谢,但我想如果我创建一个从 0 到 1000 的循环,并且在循环内我会向某个网站发起请求!这将是一个问题。这是我想避免的
    • 我不知道爬虫大多不处理 JavaScript。感谢您的提醒!至于他们忽略robots文件,大多数主流爬虫应该观察它,但你的权利它不是万无一失的。欺骗用户代理不会影响这一点,因为它取决于爬虫本身是否尊重文件。
    【解决方案3】:

    我在我的 Web 应用程序中遇到了类似的问题,因为我在数据库中为每个浏览该站点的用户创建了一些庞大的数据,并且爬虫会引发大量无用数据的创建。但是我不想拒绝对爬虫的访问,因为我希望我的网站被索引并找到;我只是想避免创建无用的数据并减少爬取所需的时间。

    我通过以下方式解决了这个问题:

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

      • 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>

      这种方法的问题在于,它对于身份不明或蒙面的爬虫并非 100% 可靠,但它可能对您的情况有用。

    • 在那之后,我必须找到一种方法来区分自动化机器人(爬虫、屏幕抓取器等)和人类,我意识到该解决方案需要某种交互性,例如单击按钮。好吧,一些爬虫确实会处理 javascript 并且很明显他们会使用 button 元素的 onclick 事件,但如果它是非交互式元素,例如div。以下是我在我的 Web 应用程序 www.so-much-to-do.com 中使用的 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

    【讨论】:

      猜你喜欢
      • 2018-06-06
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多