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