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