PDF ან სურათი შეიძლება წარმატებით გაიაროს პროქსის გავლით და შემდეგ ჩავარდეს აკრძალვის ამოცნობაში. Scrapy-ის საბაზისო Response ავლენს სხეულის ბაიტებს, მაგრამ მისი 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 აქტიური და შეცვალეთ ის კლასიფიკაცია, რომელმაც გამოიწვია ჩავარდნა, ნაცვლად იმისა, რომ ორობითი ჩამოტვირთვებისთვის მთელი აკრძალვის ამოცნობა გამორთოთ.

დაკავშირებული სტატიები