scrapy-proxy-pool: обработка бинарных ответов при обнаружении блокировок
Ограничьте проверку текстовых шаблонов scrapy-proxy-pool до TextResponse, сохранив решения о статусе и пустом теле.
PDF или изображение может успешно прийти через прокси, а затем потерпеть неудачу в обнаружении блокировок. Базовый Response в Scrapy раскрывает байты тела, но его свойство text вызывает ошибку «Response content isn't text.»
Если установленная политика scrapy-proxy-pool безоговорочно ищет в response.text, замените её версией, учитывающей тип:
from scrapy.http import TextResponse
from scrapy_proxy_pool.policy import BanDetectionPolicy
class BinaryAwarePolicy(BanDetectionPolicy):
def response_is_ban(self, request, response):
if isinstance(response, TextResponse):
if self.BANNED_PATTERN.search(response.text):
return True
if response.status not in self.NOT_BAN_STATUSES:
return True
return response.status == 200 and not response.body
Выберите её через настройку расширения пакета:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Это сохраняет правила политики о статусе и пустом теле и ограничивает текстовый поиск ответами, которые его поддерживают. Унаследованная политика исключений также остаётся доступной.
Просмотрите и эти оставшиеся правила для приложения: намеренно пустой ответ 200 или обычная ошибка назначения не всегда доказывают плохой прокси. Оставьте промежуточное ПО активным и измените классификацию, вызвавшую сбой, вместо того чтобы отключать всё обнаружение блокировок для бинарных загрузок.