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