Bir PDF veya görsel proxy üzerinden başarıyla gelebilir ve ardından yasak algılamada başarısız olabilir. Scrapy'nin temel Response nesnesi gövde baytlarını açığa çıkarır, ancak text özelliği “Response content isn't text.” hatasını yükseltir.

Kurulu scrapy-proxy-pool ilkesi response.text içinde koşulsuz arıyorsa, o ilkeyi türü bilen bir sürümle değiştirin:

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

Paketin uzantı ayarı üzerinden seçin:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Bu, ilkenin durum ve boş gövde kurallarını korur ve metin aramasını bunu destekleyen yanıtlarla sınırlar. Devralınan istisna ilkesi de kullanılabilir kalır.

Kalan kuralları uygulama açısından da gözden geçirin: kasıtlı olarak boş bir 200 yanıtı veya olağan bir hedef hatası her zaman kötü proxy kanıtı değildir. Ara katmanı etkin bırakın ve hataya yol açan sınıflandırmayı değiştirin; ikili indirmeler için tüm yasak algılamayı kapatmak yerine.

İlgili makaleler