یک PDF یا تصویر می‌تواند با موفقیت از طریق پروکسی برسد و سپس در تشخیص مسدودسازی شکست بخورد. Response پایه در Scrapy بایت‌های بدنه را نشان می‌دهد، اما ویژگی text آن خطای «Response content isn't text.» را ایجاد می‌کند.

اگر سیاست نصب‌شده scrapy-proxy-pool بدون شرط در response.text جست‌وجو می‌کند، آن سیاست را با نسخه‌ای که نوع پاسخ را در نظر می‌گیرد جایگزین کنید:

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

آن را از طریق تنظیم افزونه بسته انتخاب کنید:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

این کار قواعد وضعیت و بدنه خالی سیاست را حفظ می‌کند و جست‌وجوی متنی را به پاسخ‌هایی محدود می‌کند که از آن پشتیبانی می‌کنند. سیاست استثنای به‌ارث‌رسیده نیز همچنان در دسترس است.

آن قواعد باقی‌مانده را هم برای برنامه بازبینی کنید: پاسخ 200 که به‌عمد خالی است یا خطای عادی مقصد همیشه دلیل پروکسی بد نیست. میان‌افزار را فعال نگه دارید و طبقه‌بندی‌ای را که باعث شکست شد تغییر دهید، نه اینکه همه تشخیص مسدودسازی را برای دانلودهای دودویی خاموش کنید.

مقالات مرتبط