web-dev-qa-db-fra.com

Détecter les robots de recherche via JavaScript

Je me demande comment pourrais-je procéder pour détecter les robots de recherche? La raison pour laquelle je demande, c'est parce que je veux supprimer certains appels JavaScript si l'agent utilisateur est un bot.

J'ai trouvé un exemple sur la façon de détecter un certain navigateur, mais je ne peux pas trouver d'exemples sur la façon de détecter un robot de recherche:

/MSIE (\d+\.\d+);/.test(navigator.userAgent); //test for MSIE x.x

Exemple de robots de recherche que je souhaite bloquer:

Google 
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) 
Googlebot/2.1 (+http://www.googlebot.com/bot.html) 
Googlebot/2.1 (+http://www.google.com/bot.html) 

Baidu 
Baiduspider+(+http://www.baidu.com/search/spider_jp.html) 
Baiduspider+(+http://www.baidu.com/search/spider.htm) 
BaiDuSpider 
43
Jon

Ceci est l'expression régulière de Ruby UA agent_orange la bibliothèque utilise pour tester si un userAgent semble être un bot. Vous pouvez l'affiner pour des bots spécifiques en référençant la liste des utilisateurs de bots ici :

/bot|crawler|spider|crawling/i

Par exemple, vous avez un objet, util.browser, vous pouvez enregistrer sur quel type d'appareil se trouve un utilisateur:

util.browser = {
   bot: /bot|googlebot|crawler|spider|robot|crawling/i.test(navigator.userAgent),
   mobile: ...,
   desktop: ...
}
41
megawac

Le regex suivant correspondra aux plus grands moteurs de recherche selon cet article .

/bot|google|baidu|bing|msn|duckduckbot|teoma|Slurp|yandex/i
    .test(navigator.userAgent)

Les moteurs de recherche de correspondances sont:

  • Baidu
  • Bingbot/MSN
  • DuckDuckGo
  • Google
  • Teoma
  • Yahoo!
  • Yandex

De plus, j'ai ajouté bot comme catchall pour les petits robots/robots.

15
Edo

Essaye ça. Il est basé sur la liste des robots sur disponible sur https://github.com/monperrus/crawler-user-agents

var botPattern = "(googlebot\/|Googlebot-Mobile|Googlebot-Image|Google favicon|Mediapartners-Google|bingbot|Slurp|Java|wget|curl|Commons-HttpClient|Python-urllib|libwww|httpunit|nutch|phpcrawl|msnbot|jyxobot|FAST-WebCrawler|FAST Enterprise Crawler|biglotron|teoma|convera|seekbot|gigablast|exabot|ngbot|ia_archiver|GingerCrawler|webmon |httrack|webcrawler|grub.org|UsineNouvelleCrawler|antibot|netresearchserver|speedy|fluffy|bibnum.bnf|findlink|msrbot|panscient|yacybot|AISearchBot|IOI|ips-agent|tagoobot|MJ12bot|dotbot|woriobot|yanga|buzzbot|mlbot|yandexbot|purebot|Linguee Bot|Voyager|CyberPatrol|voilabot|baiduspider|citeseerxbot|spbot|twengabot|postrank|turnitinbot|scribdbot|page2rss|sitebot|linkdex|Adidxbot|blekkobot|ezooms|dotbot|Mail.RU_Bot|discobot|heritrix|findthatfile|europarchive.org|NerdByNature.Bot|sistrix crawler|ahrefsbot|Aboundex|domaincrawler|wbsearchbot|summify|ccbot|edisterbot|seznambot|ec2linkfinder|gslfbot|aihitbot|intelium_bot|facebookexternalhit|yeti|RetrevoPageAnalyzer|lb-spider|sogou|lssbot|careerbot|wotbox|wocbot|ichiro|DuckDuckBot|lssrocketcrawler|drupact|webcompanycrawler|acoonbot|openindexspider|gnam gnam spider|web-archive-net.com.bot|backlinkcrawler|coccoc|integromedb|content crawler spider|toplistbot|seokicks-robot|it2media-domain-crawler|ip-web-crawler.com|siteexplorer.info|elisabot|proximic|changedetection|blexbot|arabot|WeSEE:Search|niki-bot|CrystalSemanticsBot|rogerbot|360Spider|psbot|InterfaxScanBot|Lipperhey SEO Service|CC Metadata Scaper|g00g1e.net|GrapeshotCrawler|urlappendbot|brainobot|fr-crawler|binlar|SimpleCrawler|Livelapbot|Twitterbot|cXensebot|smtbot|bnf.fr_bot|A6-Indexer|ADmantX|Facebot|Twitterbot|OrangeBot|memorybot|AdvBot|MegaIndex|SemanticScholarBot|ltx71|nerdybot|xovibot|BUbiNG|Qwantify|archive.org_bot|Applebot|TweetmemeBot|crawler4j|findxbot|SemrushBot|yoozBot|lipperhey|y!j-asr|Domain Re-Animator Bot|AddThis)";
var re = new RegExp(botPattern, 'i');
var userAgent = 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)';
if (re.test(userAgent)) {
    console.log('the user agent is a crawler!');
}
12

L'exemple "test pour MSIE x.x" est juste du code pour tester userAgent contre une expression régulière. Dans votre exemple, l'expression rationnelle est le

/MSIE (\d+\.\d+);/

partie. Remplacez-le simplement par votre propre expression rationnelle par rapport à laquelle vous souhaitez tester l'agent utilisateur. Ce serait quelque chose comme

/Google|Baidu|Baiduspider/.test(navigator.userAgent)

où la barre verticale est l'opérateur "ou" pour faire correspondre l'agent utilisateur à tous vos robots mentionnés. Pour plus d'informations sur l'expression régulière, vous pouvez vous référer à ce site puisque javascript utilise RegExp de style Perl.

0
morten.c