قد يصل ملف 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 الفارغة عن قصد أو خطأ وجهة عادي ليس دليلًا قاطعًا على وكيل سيئ. أبقِ البرمجية الوسيطة نشطة وغيّر التصنيف الذي تسبب في الفشل، بدلًا من تعطيل كل كشف حظر للتنزيلات الثنائية.

مقالات ذات صلة