Как отсеить поисковых ботов через USER_AGENT

WebSQLNeeder

Новичок
Как отсеить поисковых ботов через USER_AGENT

Добрый день.

Говорят поискового бота можно отсеить через его поле юзер_агент. Но дело в том, что даже у Яндекса существует несколько разновидностей этого поля, как через регулярные выражения найти, что в $_SERVER['HTTP_USER_AGENT'] имеется слово, например "yandex" или "google" ну и так далее.
 

Фанат

oncle terrible
Команда форума
так твой вопрос сводится к регулярным выражениям?
 

WebSQLNeeder

Новичок
В принципе да (напомните какой функцией).

Или может есть какие то универсальные способы определить, что вот это поисковый бот, мне без важности какой именно это бот и с какого сайта. Вот в обычном виде поле юзерагента содержит для живых людей еще и версию ОС пользователя и т. д. - может по отсутствию этого можно определить, что это бот?

Или может это какая то тривиальная задача и решается стандартными классическими методами?

Буду благодарен за подсказку.
 

Andreika

"PHP for nubies" reader
функция preg_match
определять можно и по ip адресам

ЗЫ.в поле юзерагент Яndex есть версия ОС )

-~{}~ 13.10.05 23:38:

конкретно для yandex.ru
http://webmaster.yandex.ru/faq.xml?id=502499#user-agent

для остальных надо искать.. или посмотреть исходники анализатора логов
 

Фанат

oncle terrible
Команда форума
для того, чтобы найти в одной подстроке другую, регулярные выраженияы не нужны.
достаточно функции strIstr, к примеру
 

WebSQLNeeder

Новичок
ну по айпи это вообще практически нереально, сейчас покопаю функцию preg_match

PS. То есть универсальных методов определения поисковых ботов не существует? все делается для каждого поисковика в отдельности через его юзерагенты?
 

Фанат

oncle terrible
Команда форума
То есть универсальных методов определения поисковых ботов не существует
поисковых ботов не существует.
существует текстовая строчка.
когда ты поёмёшь, что работаешь с текстом, то дело у тебя пойдёт быстрее.

а универсальный способ есть.
смотреть, кто обращался к файлу robots.txt
и по результатм пополнять список сигнатур.
 

WebSQLNeeder

Новичок
Что то никак не получается реализовать фильтр :(

Может где то есть реализованный пример - хотелось бы посмотреть как это делается.
 

si

Administrator
а чем тебе они не угодили ? если не хочешь чтобы индексировали пропиши это в robots.txt, от честных это спасет, а не честные подставят тебе любой useragent
 

Bermuda

Новичок
Есть один забавный способ защиты от нечестных ботов. Когда-то этим методом пользовался яндекс. На странице помещается невидимая для человека и некликабельная через браузер ссылка на файл. В robots.txt говорится что этот файл индексировать низя. Честные роботы туда куда сказано "низя" соваться не будут, а нечестные ложили на robots.txt и загрузят запрещенный файл. Так вот по этой некликабельной и невидимой ссылке лежит скрипт при обращении к которому закрывается доступ для того IP откуда пришел нечестный робот.

-~{}~ 14.10.05 14:19:

Идею можно развить. Основываясь на том факте, что в html-документе такую ссылочку сможет "нажать" только бот, то по переходу по ней мы будем знать, что имеем дело с ботом. В данном случае нам будет абсолютно неважно какой у него там useragent и вообще кем он прикидывается.
 

Nimous

Guest
Bermuda
Идея замечательная.
Правда, "нечестные" боты скорее всего будут кликать через анонимный прокси.
 

Spear

почемучка
мне вот тоже сейчас нужно узнать - смортит страницу пользователь или бот. (для того, чтобы если пользовтаель - проверять наличие определенной куки, отсутствие которой покажет рекламный баннер и не пустит дальше, если кукие нет. Юзеры с отключенными куками сами виноваты)

так вот, если я поставлю куку боту, она же у него не поставится7 получается что я забаню всех поисковиков, которые только и будут что видеть рекламу %)

Посоветуйте, пожалуйста, как мне поступить
 

kvf77

Red Devil
Spear

ну можно попробовать считать колличество запросов с одного IP и если одновременно там больше 5-10 - считать ботом и банить, предварительно составив список "правильных" ботов (например Яндекс) и их не банить
 

Nimous

Guest
проверять наличие определенной куки
А ставить ты её будешь ГДЕ?
На какой-то одной странице?
А если кто-то захочет зайти в обход?

-~{}~ 14.10.05 17:19:

ну можно попробовать считать колличество запросов с одного IP
Тоже не факт.

Лучшим решением кажутся всё-таки манипуляции с robots.txt
 

Bermuda

Новичок
Автор оригинала: Nimous
Правда, "нечестные" боты скорее всего будут кликать через анонимный прокси.
Ну если количество прокси не больше количества разных динамических страниц, то весь сайт отканировать не удасться, потому как такую ловушку можно ставить на каждой странице видоизменяя ее тип и адрес скрипта. В итоге забянатся все анонимные прокси, а бот так и не завершит сканирование.

Под "разными динамическими страницами" я понимаю димамические страницы с разным содержимым.
 

Nimous

Guest
Если ты хочешь закрыть для правильных ботов какую-то часть сайта, robots.txt вполне должно хватить, потому, что это - ПРАВИЛЬНЫЙ бот.

Или ты хочешь именно крутить ботам рекламу?
 

Spear

почемучка
спасибо за ответы,
сейчас попробую объяснить конкретнее:

1. все что пишу ниже - относится только к главной странице. Если пользовтаель пошёл в обход - так и быть. Пусть идет.

Есть страница index.php
когда в неё идет обращение, скрипт проверяет наличие и валидность куки, которая определяет - смотрел ли юзер рекламу за последние 24 часа.
Если такой кукие нет-, то она ставится (или если прошло более 24 часов).
Реклама в виде - ничего кроме рекламы по середине (флеш-баннер большой) и вверху ссылки "сейчас вы будете бла-бла премещены и .т.п)
внизу примечание - если вы рекламу видите часто, или вас не пускает - прочтите FAQ
и так далее. В факе скажем что нужно включить куки, а если это невозможно (или по другой причине) - вы можете пользоваться проектом, но только не главной страницей.

Так вот - мне нужно убрать проверку на наличие куки и пускать ботов на сайт в любом случае. Для этого нужно узнать - а бот ли он? :)
 

Bermuda

Новичок
Spear
У большинства ботов скорее всего не поддерживается Javascript.
 
Сверху