קובץ 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 שרוקנה בכוונה או שגיאת יעד רגילה אינן תמיד הוכחה לפרוקסי גרוע. השאירו את ה-middleware פעיל ושנו את הסיווג שגרם לכשל, במקום לכבות את כל זיהוי החסימות עבור הורדות בינאריות.

מאמרים קשורים