Middleware proxy của Scrapy: giá trị trả về Request và None
Hãy trả lại quyền điều khiển sau khi gán proxy Scrapy thay vì vô tình lên lịch lại cùng yêu cầu trước khi tải xuống.
Địa chỉ proxy thay đổi trong nhật ký. Đích đến không bao giờ xuất hiện trong nhật ký truy cập của proxy. Hãy kiểm tra xem middleware của bạn có để yêu cầu đến được trình tải xuống hay không.
Trong middleware trình tải xuống của Scrapy, trả về một Request nghĩa là lên lịch lại yêu cầu đó. Điều đó không có nghĩa là «tiếp tục gửi đối tượng này với siêu dữ liệu tôi vừa thay đổi».
Đối với một bộ chọn chỉ chọn tuyến đường, hình dạng quan trọng là:
def process_request(self, request):
request.meta['proxy'] = self.choose_proxy()
return None
Đoạn này cho thấy dạng hook hiện tại; hãy dùng giao diện middleware mà bản phát hành Scrapy đã cài đặt hỗ trợ. Bộ chọn phải trả về một điểm cuối hợp lệ và xử lý rõ ràng một nhóm không khả dụng. Một lần thu thập công khai cho phép trung gian công khai có thể lấy ứng viên HTTP từ danh sách proxy HTTP cho giá trị trả về đó.
Trả về None cho phép phần còn lại của middleware yêu cầu và trình tải xuống tiếp tục. Trả về một Request khác hữu ích khi bạn chủ động thay thế hoặc thử lại công việc, nhưng nó cần lý do và điều kiện thoát.
Một bộ xoay vòng trả về cùng yêu cầu mỗi lần có thể chạy đi chạy lại mã chọn của chính nó mà không bao giờ tạo kết nối đến đích. Tăng thời gian chờ hoặc mở thêm cổng proxy không thể sửa vòng lặp luồng điều khiển đó.
Hãy xem xét việc vào middleware, hành vi trả về và lần thử mạng thực tế đầu tiên như những sự kiện riêng biệt. Một dòng nhật ký ghi «đã chọn proxy» chỉ chứng minh bộ chọn đã chạy. Nó không chứng minh rằng một yêu cầu với điểm cuối đã chọn đã được gửi.