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