scrapy-proxy-pool: χειρισμός δυαδικών αποκρίσεων στην ανίχνευση απαγορεύσεων
Περιορίστε τον έλεγχο μοτίβων κειμένου του scrapy-proxy-pool σε TextResponse διατηρώντας τις αποφάσεις κατάστασης και κενού σώματος.
Ένα PDF ή μια εικόνα μπορεί να φτάσει επιτυχώς μέσω διακομιστή μεσολάβησης και μετά να αποτύχει μέσα στην ανίχνευση απαγορεύσεων. Το βασικό Response του Scrapy εκθέτει τα byte του σώματος, αλλά η ιδιότητα 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 ενεργό και αλλάξτε την ταξινόμηση που προκάλεσε την αποτυχία, αντί να απενεργοποιήσετε όλη την ανίχνευση απαγορεύσεων για δυαδικές λήψεις.