有数以千计的爬虫,包含 .NET 框架的用户代理解析器只能处理其中的几个,并且它不会保留它们的更新列表。
安装这个.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;
}
Robot:普通爬虫
RobotMobile:模拟移动设备的
爬虫 RobotImitator:这不是爬虫,而是模拟爬虫的东西
如果你愿意,你也可以使用:
var isHuman = UserAgentClassifier.IsHuman(ua);
在这种情况下,您还可以处理被黑客入侵的用户代理和其他情况。