А что значит
сайт падает с ошибкой? В смысле перестаёт возвращать адекватный ответ?
Отвечая на вопрос: в своё время чтобы обходить всевозможные механизмы защиты от парсинга разбивал процедуру парсинга на много много частей: парсинг одного конкретного элемента, bunch (парсинг группы элементов), сессия (bunch состоящий из bunch'ей).
В коде банч от сессии отличался только количеством обработанных элементов. То есть алгоритм парсинга получался какой-то такой:
Обрабатываем элемент №i
Если ошибка, то
ждём SINGLE_REQUEST_TIMEOUT
пробуем еще раз
i++
Если остаток от деления i на ITEMS_IN_BUNCH равен нулю, то
ждём BUNCH_TIMEOUT
Иначе Если остаток от деления i на ITEMS_IN_SESSION равен нулю, то
ждём SESSION_TIMEOUT
Иначе
ждём SINGLE_REQUEST_TIMEOUT
Надеюсь понятно объяснил. Каждый из таймаутов охватывает временные промежутки разных масштабов - от секунд и минут, до часов и дней. Например, SINGLE_REQUEST_TIMEOUT может быть 1000мс, BUNCH_TIMEOUT - 30000мс, а SESSION_TIMEOUT может превосходить рамки часов/суток. С таким подходом пока ни разу не сталкивался с проблемами парсинга