Một truy vấn proxy pool chặn có thể khiến Scrapy đình trệ
Giữ lệnh gọi API proxy pool đồng bộ ra khỏi đường vòng lặp sự kiện của Scrapy và trao cho việc khám phá endpoint chính sách thất bại riêng.
Crawler đã được cấu hình đủ số yêu cầu đồng thời. Vậy mà nó vẫn dừng mỗi khi hỏi proxy pool một địa chỉ khác. Thêm proxy không hề tác động đến sự dừng đó.
Một mẫu middleware phổ biến gọi requests.get(pool_url) bên trong process_request(). Đó là thao tác mạng đồng bộ trên một đường lẽ ra phải phối hợp với engine bất đồng bộ của Scrapy. Trong lúc lệnh gọi chờ, nó có thể giữ công việc không liên quan trên cùng luồng vòng lặp sự kiện.
Có hai yêu cầu trong công việc
Một yêu cầu lấy endpoint từ dịch vụ pool. Yêu cầu kia dùng endpoint đó để liên hệ với đích. Hãy đo và báo cáo riêng. Một API pool chậm có thể khiến mọi proxy được chọn trông chậm trước khi ứng dụng kết nối tới nó.
Dùng tích hợp khám phá bất đồng bộ mà phiên bản Scrapy đã cài hỗ trợ, hoặc lấy và làm mới một tập endpoint cục bộ có giới hạn nằm ngoài đường tới hạn của từng yêu cầu. Nếu công việc chặn phải được chuyển đi, hãy cho trình thực thi đó giới hạn và xử lý thời gian chờ riêng; hàng đợi vô hạn chỉ dời chỗ trễ.
Đừng tự động phát thêm một lệnh khám phá cho mỗi yêu cầu. Bộ nhớ đệm ngắn hạn hoặc một lô thuê có thể giảm phụ thuộc vào dịch vụ pool, miễn là vòng đời của nó khớp với chính sách endpoint thực tế của dịch vụ.
Định nghĩa thế nào là tra cứu thất bại
Phản hồi pool rỗng hoặc thất bại không được lặng lẽ gỡ bỏ siêu dữ liệu proxy và cho phép yêu cầu trực tiếp. Hãy chọn kết cục rõ ràng: chờ trong ngân sách tác vụ, thất bại, hoặc dùng endpoint đã lưu trong bộ nhớ đệm được phê duyệt.
Cũng giữ thông thoáng tuyến riêng của API pool. Nếu đó là dịch vụ nội bộ, việc gửi tên máy chủ riêng của nó qua chính proxy mà nó giúp chọn có thể tạo ra phụ thuộc vòng.
Khi khám phá hoạt động mà không chặn công việc không liên quan, hãy xem xét giao dịch proxy thông thường. Đó là những sửa chữa riêng, và thời gian của chúng xứng đáng có trường riêng trong nhật ký.