Spider / Robot UserAgent Detection C#

问题描述 投票:3回答:2

我正在开发一个应用程序,如果用户不在我们的浏览器列表中,它将重定向用户升级浏览器。

我的目标是根据其UserAgent字符串创建一个异常来检测它们是否是搜寻器。

至此,我收到一条消息……“ .ToLower的未定义或扩展方法”

这是我的代码:

    private bool IsValidCrawler(HttpRequestBase request)
    {
        bool isCrawler = true;

        switch (request.Browser.Crawler.ToLower())  
        {
            case "googlebot":
            case "bingbot":
            case "yahoo!":
            case "facebookexternalhit":
            case "facebookplatform":
                break;
        }

        return isCrawler;
    }

有人可以指出我出了问题的地方吗?

c# asp.net user-agent
2个回答
11
投票

如果您查看Crawler属性(http://msdn.microsoft.com/en-us/library/system.web.configuration.httpcapabilitiesbase.crawler(v=vs.110).aspx)的文档,您会发现它是布尔类型。

属性本身会通知您请求是否来自已知的搜寻器。您可以暂时尝试以下方法。保留方法,这样您就不必进行太多更改。

private bool IsValidCrawler(HttpRequestBase request)
{
    bool isCrawler = request.Browser.Crawler;

    return isCrawler;
}

0
投票

有成千上万的搜寻器,包括在.NET框架中的用户代理解析器仅能处理其中的几个,并且不保留它们的更新列表。

安装this .nuget软件包,它提供了一个语义解析器,并且该库非常活跃。

您可以使用以下代码初始化解析器:

public static class YauaaSingleton
{
    private static UserAgentAnalyzer.UserAgentAnalyzerBuilder Builder { get; }

    private static readonly Lazy<UserAgentAnalyzer> analyzer = new Lazy<UserAgentAnalyzer> (() => Builder.Build());

    public static UserAgentAnalyzer Analyzer
    {
        get
        {
            return analyzer.Value;
        }
    }

    static YauaaSingleton()
    {
        Builder = UserAgentAnalyzer.NewBuilder();
        Builder.DropTests();
        Builder.DelayInitialization();
        Builder.WithCache(100);
        Builder.HideMatcherLoadStats();
        Builder.WithAllFields();
    }
}

然后非常简单:

  private bool IsValidCrawler(HttpRequestBase request)
  {
      var ua = YauaaSingleton.Analyzer.Parse(request.UserAgent);
      var devideClass = UserAgentClassifier.GetDeviceClass(ua);
      if (devideClass == DeviceClass.Robot || devideClass == DeviceClass.RobotMobile || devideClass == DeviceClass.RobotImitator)
          return true;
      return false;
  }

机器人

:普通搜寻器RobotMobile:模拟移动设备的爬虫RobotImitator:这不是爬虫,而是模仿爬虫的东西

如果您愿意,也可以使用:

[var isHuman = UserAgentClassifier.IsHuman(ua);在这种情况下,您还处理被黑的用户代理和其他情况。

© www.soinside.com 2019 - 2024. All rights reserved.