Regexp匹配最终用户浏览器的用户代理,但不是精确度> 90%的爬虫

kno*_*orv 11 regex browser user-agent

我正在尝试构建一个regexp,它将评估为User-Agent:"由人类导航的浏览器",但对机器人来说是假的.毋庸置疑,匹配并不准确,但如果说得对,那么90%的情况就足够了.

到目前为止,我的方法是针对User-Agent五大桌面浏览器(MSIE,Firefox,Chrome,Safari,Opera)的字符串.具体来说,如果用户代理是bot(Googlebot,msnbot等),我希望regexp 匹配.

目前我正在使用以下regexp,它似乎达到了所需的精度:

^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$
Run Code Online (Sandbox Code Playgroud)

我观察到少量漏报,主要是移动浏览器.所有例外都匹配:

(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)
Run Code Online (Sandbox Code Playgroud)

我的问题是:给定所需的准确度级别,您将如何改进正则表达式?你能想到给定正则表达式的任何重大误报或漏报吗?

请注意,问题是关于基于正则表达式的User-Agent匹配.有许多其他方法可以解决这个问题,但这些方法超出了这个问题的范围.

Sjo*_*erd 23

您可以通过检查哪些用户代理访问robots.txt来构建黑名单.


fux*_*xia 7

许多抓取工具不会发送Accept-Language标头,而AFAIK所有浏览器都会发送.您可以将此信息与正则表达式结合使用,以获得更准确的结果.