scrapy-proxy-pool: ban aşkarlanmasında binar cavabların işlənməsi
scrapy-proxy-pool mətn nümunəsi yoxlamasını TextResponse ilə məhdudlaşdırın, status və boş gövdə qərarlarını saxlayın.
PDF və ya şəkil proksidən uğurla keçib sonra ban aşkarlanmasında uğursuz ola bilər. Scrapy-nin əsas Response obyekti body baytlarını göstərir, lakin onun text xassəsi “Response content isn't text.” xətasını verir.
Quraşdırılmış scrapy-proxy-pool siyasəti response.text-i şərtsiz axtarırsa, həmin siyasəti tipi nəzərə alan versiya ilə əvəz edin:
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
Onu paketin genişləndirmə parametri ilə seçin:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Bu, siyasətin status və boş gövdə qaydalarını saxlayır, mətn axtarışını isə yalnız onu dəstəkləyən cavablarla məhdudlaşdırır. Miras alınan istisna siyasəti də mövcud qalır.
Qalan qaydaları da tətbiq üçün nəzərdən keçirin: qəsdən boş 200 cavabı və ya adi təyinat xətası həmişə pis proksinin sübutu deyil. Middleware-i aktiv saxlayın və uğursuzluğa səbəb olan təsnifatı dəyişin, binar yükləmələr üçün bütün ban aşkarlanmasını söndürmək əvəzinə.