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