11

我正在尝试构建一个正则表达式,对于User-Agent“由人类导航的浏览器”的 :s 评估为 true,但对于机器人则为 false。不用说匹配不会是精确的,但如果它在 90% 的情况下都正确,那就足够了。

到目前为止,我的方法是针对User-Agent五种主要桌面浏览器(MSIE、Firefox、Chrome、Safari、Opera)的字符串。具体来说,如果用户代理是机器人(Googlebot、msnbot 等),我希望正则表达式不匹配。

目前我正在使用以下正则表达式,它似乎可以达到所需的精度:

^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$

我观察到少量的误报,主要是移动浏览器。例外都匹配:

(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)

我的问题是:鉴于所需的准确度水平,您将如何改进正则表达式?您能想到给定正则表达式的任何主要误报或误报吗?

请注意,该问题专门针对基于正则表达式的User-Agent匹配。还有很多其他方法可以解决这个问题,但这些都超出了这个问题的范围。

4

3 回答 3

23

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

于 2010-03-24T14:05:39.790 回答
7

许多爬虫不会发送 Accept-Language 标头,而 AFAIK 所有浏览器都会发送。您可以将此信息与您的正则表达式结合起来以获得更准确的结果。

于 2010-03-25T16:37:30.330 回答
4

我宁愿使用相反的模式,机器人模式要简单得多

我个人使用以下正则表达式

/bot\b|index|spider|crawl|wget|slurp|Mediapartners-Google/i
于 2012-05-14T13:49:07.450 回答