scrapy-proxy-pool: menangani respons biner dalam deteksi blokir
Batasi pemeriksaan pola teks scrapy-proxy-pool ke TextResponse sambil mempertahankan keputusan status dan badan kosong.
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.