Если речь про легитимные боты, например поисковые то подойдёт эта библиотека
https://github.com/JayBizzle/Crawler-Detect
Общий принцип это смотреть на HTTP-заголовки, user-agent как минимум, но подделать можно что угодно.
Таких "умных" ботов можно вычислять только по поведенческим факторам, например отслеживать частоту запросов, находить определённые шаблоны в запросах и тд.
Например запросы когда загружается страница, но не идут следом запросы на загрузку ресурсов (картинок, стилей js и тд).
Можете посмотреть старенький доклад от 2ГИС про то как они защищаются от парсинга api
https://www.youtube.com/watch?v=pYxnW7kYcbU