我正在尝试构建一个正则表达式,对于 User-Agent
的 User-Agent
:s评估为真,但对于机器人则为假 . 毋庸置疑,匹配并不准确,但如果说得对,说90%的情况就足够了 .
到目前为止,我的方法是针对五大桌面浏览器(MSIE,Firefox,Chrome,Safari,Opera)的 User-Agent
字符串 . 具体来说,如果用户代理是机器人(Googlebot,msnbot等),我希望regexp NOT 匹配 .
目前我正在使用以下regexp,它似乎达到了所需的精度:
^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$
我观察到少量漏报,主要是移动浏览器 . 所有例外都匹配:
(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)
我的问题是: Given the desired accuracy level, how would you improve the regexp? Can you think of any major false positives or false negatives to the given regexp?
请注意,问题是关于基于regexp的 User-Agent
匹配 . 有许多其他方法可以解决这个问题,但这些方法超出了这个问题的范围 .
3 回答
许多抓取工具不会发送Accept-Language标头,而AFAIK所有浏览器都会发送 . 您可以将此信息与正则表达式结合使用,以获得更准确的结果 .
您可以通过检查哪些用户代理访问robots.txt来构建黑名单 .
我宁愿使用相反的方法,有一个机器人的模式更简单
我个人使用以下正则表达式