PDF atau imej boleh tiba dengan jayanya melalui proksi dan kemudian gagal dalam pengesanan sekatan. Response asas Scrapy mendedahkan bait badan, tetapi sifat text-nya menimbulkan ralat “Response content isn't text.”

Jika dasar scrapy-proxy-pool yang dipasang mencari response.text tanpa syarat, gantikan dasar itu dengan versi yang peka jenis:

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

Pilihnya melalui tetapan sambungan pakej:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Ini mengekalkan peraturan status dan badan kosong dasar itu sambil mengehadkan carian teks kepada respons yang menyokongnya. Dasar pengecualian yang diwarisi kekal tersedia.

Semak juga peraturan selebihnya itu untuk aplikasi: respons 200 yang sengaja kosong atau ralat destinasi biasa bukan selalu bukti proksi buruk. Biarkan middleware kekal aktif dan ubah klasifikasi yang menyebabkan kegagalan, bukannya mematikan semua pengesanan sekatan untuk muat turun binari.

Artikel berkaitan