Gắn proxy vào các yêu cầu hình ảnh của Scrapy
Trang trí các Requests do ImagesPipeline tạo ra để việc tải hình ảnh nhận được proxy mà không cần dựng lại logic yêu cầu của pipeline.
from scrapy.pipelines.images import ImagesPipeline
class ProxiedImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
for request in super().get_media_requests(item, info):
request.meta['proxy'] = 'http://proxy.example:8080'
yield request
Với Scrapy 2.13.3, hãy thay mục ImagesPipeline tiêu chuẩn trong ITEM_PIPELINES bằng đường dẫn import của lớp con này. Giữ nguyên IMAGES_STORE và các cài đặt khác.
Gọi lớp cha giữ lại trường URL hình ảnh và các callback đã cấu hình. Lớp con chỉ thêm tuyến yêu cầu, mà HttpProxyMiddleware được bật sẽ dùng. Mỗi URL hình ảnh vẫn là đích của nó. Các yêu cầu hình ảnh công khai mới không có thông tin đăng nhập proxy có thể dùng một mục từ danh sách proxy HTTP khi tuyến đó được phép.
Các yêu cầu trang giữ chính sách riêng. Với môi trường proxy toàn cục, meta={'proxy': None} khiến một yêu cầu trang được chọn trở nên trực tiếp trong bản phát hành này.
Hãy kiểm tra xem một lượt tải có thực sự được phát ra không. Cache của pipeline trúng đích có thể tránh một yêu cầu mạng. Với các lượt truyền mới, hãy so sánh các mục kết quả hình ảnh đã hoàn tất với URL đã yêu cầu: các thao tác thành công xuất hiện ở đó, còn thất bại có thể để trường URL hình ảnh ban đầu vẫn được điền. Theo dõi các kết quả bị thiếu qua nhật ký của trình tải xuống và proxy đã chọn.