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 або звичайна помилка призначення не завжди доводять поганий проксі. Залиште проміжне програмне забезпечення активним і змініть класифікацію, що спричинила збій, замість вимикання всього виявлення блокувань для бінарних завантажень.