Một tệp PDF hoặc hình ảnh có thể đến thành công qua proxy rồi thất bại trong phát hiện chặn. Response cơ sở của Scrapy hiển thị các byte thân, nhưng thuộc tính text của nó ném lỗi “Response content isn't text.”

Nếu chính sách scrapy-proxy-pool đã cài đặt tìm kiếm response.text vô điều kiện, hãy thay chính sách đó bằng phiên bản nhận biết kiểu:

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

Chọn nó thông qua cài đặt tiện ích mở rộng của gói:

PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"

Cách này giữ nguyên các quy tắc về trạng thái và thân rỗng của chính sách, đồng thời giới hạn tìm kiếm văn bản ở những phản hồi hỗ trợ nó. Chính sách ngoại lệ kế thừa vẫn khả dụng.

Cũng hãy xem lại các quy tắc còn lại cho ứng dụng: phản hồi 200 cố ý rỗng hoặc lỗi đích thông thường không phải lúc nào cũng chứng minh proxy tồi. Giữ middleware hoạt động và thay đổi phân loại đã gây ra lỗi, thay vì tắt toàn bộ phát hiện chặn cho tải xuống nhị phân.

Bài viết liên quan