#re&ex #browser #user-a&ent
#регулярное выражение #браузер #user-a&ent
Вопрос:
Я пытаюсь создать регулярное выражение, которое будет принимать значение true для User-A&ent
: s «браузеров, управляемых людьми», но false для ботов. Излишне говорить, что соответствие не будет точным, но если оно все делает правильно, скажем, в 90 % случаев, этого более чем достаточно.
Пока мой подход заключается в том, чтобы настроить таргетинг на User-A&ent
строку пяти основных браузеров для настольных компьютеров (MSIE, Firefox, Chrome, Safari, Opera). В частности, я хочу, чтобы регулярное выражение НЕ совпадало, если пользовательским агентом является бот (Goo&lebot, msnbot и т.д.).
В настоящее время я использую следующее регулярное выражение, которое, по-видимому, обеспечивает желаемую точность:
^(Mozilla.*(Gecko|KHTML|MSIE|Presto|Trident)|Opera).*$
Я наблюдал небольшое количество ложноотрицательных результатов, которые в основном являются мобильными браузерами. Все исключения совпадают:
(BlackBerry|HTC|LG|MOT|Nokia|NOKIAN|PLAYSTATION|PSP|SAMSUNG|SonyEricsson)
Мой вопрос таков: учитывая желаемый уровень точности, как бы вы улучшили регулярное выражение? Можете ли вы вспомнить какие-либо серьезные ложные срабатывания или ложноотрицательные значения для данного регулярного выражения?
Пожалуйста, обратите внимание, что вопрос конкретно касается соответствия на основе регулярных выражений User-A&ent
. Существует множество других подходов к решению этой проблемы, но они выходят за рамки данного вопроса.
Комментарии:
1. Что насчет ботов, которые идентифицируют себя как браузеры?
2. Macha: Очевидно, что они будут классифицированы как браузеры. Но пока они редки, они не будут проблемой, учитывая заявленную цель точности.
3. Да, ошибка, по которой кто-то запускает бота через ваш веб-сайт, честна. Лучшее решение — переосмыслить, что вы здесь делаете и как вы собираетесь это делать. Большинство людей предпочитают определять ботов по поведению (множество разных страниц за очень короткий промежуток времени), а не user a&ent.
4. Будет: Смотрите последний абзац вопроса. Это очень ясно показывает масштаб вопроса.
Ответ №1:
Вы могли бы создать черный список, проверив, к каким пользовательским агентам обращаются robots.txt.
Комментарии:
1. Интересная концепция! Способ мыслить нестандартно.
2. Потрясающая идея! хотел предоставить вам реквизиты и проголосовать за это также :).
Ответ №2:
Многие сканеры не отправляют заголовок Accept-Lan&ua&e, в то время как AFAIK все браузеры отправляют. Вы могли бы объединить эту информацию с вашим регулярным выражением, чтобы получить более точные результаты.
Комментарии:
1. Единственное, что я видел, которое не подчиняется этому, это slurp: [Mozilla / 5.0 (совместимо; Yahoo! Slurp; справка. yahoo.com/help/us/ysearch/slurp )] [en-us,en;q= 0.5] а также, если вы обслуживаете медиа, то я думаю, что иногда плагины браузера делают запрос без Accept-Lan&ua&e, если в IE (так что это не бот, но не отправляет Accept-Lan&ua&e). Также Goo&le translate не отправляет язык принятия, но в целом этот метод, похоже, работает хорошо.
2. Итак, что касается логики: вы думаете,
if (re&ex_matches || has_header) { is_human }
или вы думаете,if (re&ex_matches amp;amp; has_header) { is_human }
что будет лучше3. @NathanJ.Brauer
AND
, неOR
. Все еще не совсем надежно, но в любом случае это невозможно.
Ответ №3:
Я бы предпочел использовать обратное, имея шаблон для ботов, намного проще
лично я использую следующее регулярное выражение
/botb|index|spider|crawl|w&et|slurp|Mediapartners-Goo&le/i
Комментарии:
1. Это опасно. Я отфильтровал это
Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; Bottle of Smoke Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13
, и я запускал это только на подмножестве пользовательских агентов, которые мы когда-либо видели.2.
/botb|...
🙂 Не уверен насчет ‘index’, хотя некоторые плагины делают некоторые странные вещи со строками пользовательских агентов (особенно в IE, увеличивая длину)3. вам следует добавить «curl» к вашему регулярному выражению
4. Вероятно, это также будет соответствовать на
Mozilla/5.0 (Linux; Android 7.0; CUBOT KING KONG) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.96 Mobile Safari/537.36
телефоне Android