首页 文章

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

提问于
浏览
11

我正在尝试构建一个正则表达式,对于 User-AgentUser-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 回答

  • 4

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

  • 23

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

  • 7

    我宁愿使用相反的方法,有一个机器人的模式更简单

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

    /bot\b|index|spider|crawl|wget|slurp|Mediapartners-Google/i
    

相关问题