Говоря о парсинге, в самом начале, я хочу вывести определение проблем (или не проблем, а особенностей) связанных с тем, что сайт парсят. Все эти проблемы выглядят очень по-разному с разных сторон, так что сразу приведу их описание в виде таблицы, собранной из разных мнений и суждений об одном и том же вопросе. Вы сможете взглянуть на парсинг с разных точек зрения:

Событие Суждение от наблюдателя
(разработчик, понимает одну сторону проблемы)
Суждение от администратора
(понимает другую техническую сторону проблемы)
Суждение от маркетинга
(смотрит на происходящее со своей стороны)
Суждение от продажника
(смотрит на происходящее как на возможности)

Бот ходит по страницам сайта, скачивает их содержимое

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

Чаще всего не имеет желания исправлять имеющиеся недочеты "ради бота", хотя исправление этих же недочетов скорее всего будет полезно при обычном штатном росте бизнеса.
Чаще всего просит просто забанить ботов.

Плохо. Почему? См. правые столбцы

Видит, что бот показывает слабые места и в коде, и в кешировании (на уровне БД, файловой системы, nginx и прочего). Если цель админа - сделать масштабируемый сервис под рост бизнеса, принимает бота как тренировочный заход к нагрузке. Если цель админа - "просто чтобы работало" - наращивает ресурсы сервера, так как это явно проще, чем вылавливать и банить бота.

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

Плохо. Почему? См. правые столбцы

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

Боты собирают с сайта данные, а значит данные на сайте (и товары/услуги) востребованы. Анализируя поведение бота можно анализировать интересы B2B аудитории, люди часто оптимизируют парсинг чтобы тянуть не весь сайт, а ровно то, что им нужно (их ресуры тоже не бесплатные).

В хорошем случае, маркетинг просит статистику о ботах, выборки страниц, которые он посещал из логов и так далее. Я видел это очень редко, но подход действительно крутой.

В среднем случае радуется тому что оно есть и игнорирует существование ботов до тех пор, пока они не приносят проблем.

Во-первых когда кому-то, что-то от тебя нужно (например парсить твой сайт) - это повод начать общение, вероятно пойти на встречу, дать им данные, наладить контакт.

Парсеры товаров/услуг - потенциальные партнеры, ресселеры и так далее. Они могут быть вчера конкурентами, а завтра - твоими покупателями и постоянными партнерами, если дать им подходящие для этого условия.

В хорошем случае идет поиск владельца бота, и да, его находят и налаживают с ним работу. Такие примеры в B2B не редкость. В интернет-магазинах же часто это игнорируется и принимается за "происки конкурентов", хотя зря.

В случае ниже среднего, обычно это всё игнорируеться вплоть до наступления проблем из-за ботов (если они наступают)

Бот уронил сайт слишком напористым парсингом

Хочет срочно решить проблему, воспринимая это именно как проблему, а не как явление.

Хочет срочно решить проблему, воспринимая это именно как проблему, а не как явление. Часть воспринимается лично в адрес "у меня упал сайт".

Видит негативный эффект на посетителях, на SEO и так далее. И переходит на сторону "разработчика", требуя забанить ботов. Это чаще всего.

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

В плохом случае встает на сторону "разработчика" и требует забанить бота. Наиболее частый случай.

В хорошем случае использует это как повод начать взаимодействие по ранее найденному контакту владельца бота. Тут всегда можно что-нибудь продать.

О чем это всё? На самом деле о том, что негативная реакция на ботов либо предвзятая, либо наступает тогда, когда разработчик и администратор не справились со своей работой своевременно. Конечно сайт должен обслуживать не только посетителей, но и ботов, парсеров и других автоматизированных "посетителей", например поисковики.

На ботах можно заработать - найдите владельца бота, наладьте выгодное B2B партнерство. Наладьте обмен данными таким образом, чтобы бот вел себя цивилизовано и не ронял Ваш сайт - это всегда повод не только договориться об удобном формате передачи данных, но и вообще сбор информации с вашей аудитории. Если вас парсят - это не "враги", это тоже аудитория, очень заинтересованная, с которой можно работать. Найти владельца парсера не так сложно. В отличие от ботов занимающихся DDoS атаками, они редко прячутся специально, а если и делают это, то скорее по привычке IT-специалистов, чем по реальной потребности. Найти можно.

Боты - хороший предмет для статистики и понимания насколько рынок вас знает. Достаточно важный показатель ваших потенциальных B2B завязок, скорее всего долгосрочных и надежных.

Сделайте из списка ботов план продаж, это окупит всё - и ресурсы, и оптимизацию, и экспорт в нужные форматы.

Принуждение к миру

Всегда встречаются упертые люди, они пишут упертых ботов. Наш опыт показывает, что банить их - занятие малополезное. Тут же начинают использовать proxy или меняют поведение. Наиболее хитрые боты работают как расширение бразузера и вполне похожи на живых пользователей. Бан - часто усложнение жизни самому себе. Часто и лимитирование количества запросов с ответами вроде 403/503 воспринимает упертыми разработчиками ботов как бан. Гораздо проще - ограничить боту полосу пропускания трафика. Он не будет получать ошибок, но будет работать так медленно, как ему положено. Как другой подход - добавление задержек. В современности силами nginx можно и отделить бота от пользователя и добавить sleep чтобы он не превышал числа запросов в минуту и при этом получал данные, а не ошибку от сервера. В выигрыше будут все.

Удобная рекомендация - выдавать такому боту хотя бы раз в сутки ошибку "400 Bad Request" с телом ответа вроде "Возьми данные в нормальном формате тут http://url.example.com/data.xml. И вообще напиши нам на managers@example.com мы договоримся". Ошибки "400 Bad Request" разработчики ботов скорее всего залогируют и прочитают. Обратят внимание на подобное заявление.

Когда ботов ну очень много

Бывает такое, что ботами не занимались с самого начала, а обратили внимание на это всё, когда оно начало тормозить и падать. Лучше всего конечно - вложиться в оптимизацию кода и серверов. Боты, это считайте, что учения перед будущей нагрузкой реальными пользователями. В большинстве случаев кореляция количества ботов сегодня и юзеров завтра подтверждается. Еще оптимизация снизит цену масштабирования и решит узкие места, которые всё равно в будущем приведут к проблемам. Хорошо, что оно вылезло на ботах, а не на живых пользователях. Ну и конечно ищите пути для развития бизнеса через этих ботов. Они есть, разные и у каждого свои.

DDoS или парсинг?

Очень часто, когда на сервер смотрит не специалист по нагрузке от администраторов, а разработчик он делает вывод - "нас DDoS-ят конкурент". Скажу сразу - ддос дело очень дорогостоящее и в обычном не политизированном бизнесе такое дело практически не случается. Увидеть DDoS вживую в течение 3-5и лет можно легко в СМИ, можно в бизнесе который по каким-то причинам стал выглядеть как политизированный при политических событиях. Увидеть реальный DDoS интернет-магазина или онлайн-сервиса - скорее всего разработчику показалось и он принял криво-написанного бота за DDoS-атаку.

Да, ботов часто пишут криво. Бывает без задержек в запросах. Бывают глюки в виде скачивания одной и той же страницы по кругу и так далее. К вопросу определения DDoS/парсинг стоит подойти со следующей стороны - DDoS происходит с 10k+ IP адресов. Меньшее колиечство атакующих почти бесполезно и отбивается админами без специализированного сервиса достаточно быстро, прямо по логам nginx с помощью фаервола. Второй фактор - поведение DDoS ботов старается имитировать поведение пользователей, т.е. обходить какие-то страницы и последовательность открытых страниц выглядит почти случайной. Парсер не старается имитировать его совсем - он идет фактически прямолинейно по одному и тому же алгоритму, собирая данные. Часто парсеры имеют приоритеты обхода страниц и собирают какие-то данные чаще, какие-то реже.

Как выглядит DDoS, если у вас 1-2-3-5 VPSсевреров? Очень просто - серверы лежат "глухо", не отызваются на SSH, http и прочее. DDoS маленького ресурса заваливает его моментально.

Если при "кажущемся ddos" вам не залили канал, у вас доступен ssh, сервер не ушел в 100% cpu и 50.00 Load Average - значит это не DDoS.

На железном ("физическом") сервере DDoS характерен тем, что видно много softirq, сильно потребляют процессор потоки ядра - очень активно работает сеть. При парсинге она работает в 5-10 раз менее активно.

Так что не вините "злых конкурентов", скорее всего текущий сервер и код просто требуют оптимизации.