PDF atau gambar bisa tiba dengan sukses lewat proxy lalu gagal di dalam deteksi blokir. Response dasar Scrapy menampilkan byte badan, tetapi properti text-nya memunculkan galat “Response content isn't text.”

Jika kebijakan scrapy-proxy-pool yang terpasang menelusuri response.text tanpa syarat, ganti kebijakan itu dengan versi yang sadar tipe:

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

Pilih melalui pengaturan ekstensi paket:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Ini mempertahankan aturan status dan badan kosong dari kebijakan sekaligus membatasi pencarian teks pada respons yang mendukungnya. Kebijakan pengecualian warisan tetap tersedia.

Tinjau juga aturan yang tersisa itu untuk aplikasi: respons 200 yang sengaja kosong atau galat tujuan biasa tidak selalu membuktikan proxy buruk. Biarkan middleware tetap aktif dan ubah klasifikasi yang menyebabkan kegagalan, alih-alih mematikan seluruh deteksi blokir untuk unduhan biner.

Artikel terkait