Как распознать ботов с php? - PullRequest
17 голосов
/ 08 января 2009

Я строю статистику для своих пользователей и не хочу, чтобы посещения ботов учитывались.

Теперь у меня есть базовый php с mysql, увеличивающимся на 1 при каждом вызове страницы.

Но боты также добавляются к счету.

Кто-нибудь может придумать способ?

Главным образом, это только главные из них. Google, Yahoo, Msn и т. Д.

Ответы [ 5 ]

23 голосов
/ 08 января 2009

Вы можете проверить строку агента пользователя, пустые строки или строки, содержащие «robot», «spider», «crawler», «curl», которые могут быть роботами.

preg_match('/robot|spider|crawler|curl|^$/i', $_SERVER['HTTP_USER_AGENT']));

9 голосов
/ 08 января 2009

Вы должны фильтровать по строкам user-agent. Вы можете найти список из примерно 300 распространенных пользовательских агентов, предоставляемых ботами, здесь: http://www.robotstxt.org/db.html Выполнение этого списка и игнорирование пользовательских агентов-ботов до запуска оператора SQL должно решить вашу проблему для всех практических целей.

Если вы не хотите, чтобы поисковые системы даже заходили на страницу, используйте базовый файл robots.txt , чтобы заблокировать их.

6 голосов
/ 20 апреля 2011

У нас есть похожий вариант использования для вас, и один вариант, который мы недавно нашли весьма полезным, - это класс UASParser из user-agent-string.info .

Это класс PHP, который извлекает последний набор определений строк пользовательского агента и кэширует их локально. Класс может быть настроен на получение определений так часто или так редко, как вы считаете нужным. Автоматическая загрузка их таким образом означает, что вам не нужно следить за различными изменениями в пользовательских агентах ботов или новых, появляющихся на рынке, хотя вы полагаетесь на UAS.info, чтобы делать это точно.

Когда класс вызывается, он анализирует пользовательский агент текущего посетителя и возвращает ассоциативный массив, разделяющий составные части, например,

Array
(
    [typ] => browser
    [ua_family] => Firefox
    [ua_name] => Firefox 3.0.8
    [ua_url] => http://www.mozilla.org/products/firefox/
    [ua_company] => Mozilla Foundation
    ........
    [os_company] => Microsoft Corporation.
    [os_company_url] => http://www.microsoft.com/
    [os_icon] => windowsxp.png
)

Поле typ устанавливается на browser, когда UA определен как вероятный, принадлежащий посетителю, и в этом случае вы можете обновить свою статистику.

Несколько предостережений здесь:

  • Вы полагаетесь на UAS.info, чтобы строки агента пользователя были точными и актуальными
  • Боты, такие как google и yahoo, объявляют себя в строках своего пользовательского агента, но этот метод все равно будет подсчитывать посещения от ботов, притворяющихся посетителями-людьми (отправляя поддельных UA)
  • Как указано выше @ amdfan , блокировка ботов с помощью robots.txt должна остановить доступ большинства из них к вашей странице. Если вам нужно индексировать контент, но не увеличивать его статистику, то метод robots.txt не будет реалистичным вариантом
2 голосов
/ 08 января 2009

Проверьте пользовательский агент перед увеличением числа просмотров страниц, но помните, что это может быть подделано. PHP предоставляет пользовательский агент в $_SERVER['HTTP_USER_AGENT'], предполагая, что веб-сервер предоставляет ему эту информацию. Более подробную информацию о $_SERVER можно найти на http://www.php.net/manual/en/reserved.variables.server.php.

Список пользовательских агентов можно найти на http://www.user -agents.org ; Google также предоставит имена тех, кто принадлежит к основным поставщикам. Третий возможный источник - журналы доступа вашего веб-сервера, если вы можете их агрегировать.

0 голосов
/ 08 января 2009

Вы пытались идентифицировать их по информации от пользователя? Простой поиск в Google должен дать вам пользовательские агенты, используемые Google и т. Д.

Это, конечно, небезопасно, но большинство сканеров крупных компаний предоставляют отдельного агента пользователя.

РЕДАКТИРОВАТЬ: Предполагая, что вы не хотите ограничивать доступ ботов, но просто не учитывайте его посещение в вашей статистике.

...