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