
1. middlewares.py
import itertools, random
class RotatingProxyMiddleware:
def __init__(self):
with open("proxies.txt") as handle:
self.proxies = [line.strip() for line in handle if line.strip()]
random.shuffle(self.proxies)
self.pool = itertools.cycle(self.proxies)
def process_request(self, request, spider):
request.meta["proxy"] = f"http://{next(self.pool)}"2. settings.py
DOWNLOADER_MIDDLEWARES = {
"myproject.middlewares.RotatingProxyMiddleware": 350,
"scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
}
RETRY_TIMES = 5
DOWNLOAD_TIMEOUT = 10Vài lưu ý giúp tiết kiệm thời gian
Thứ tự rất quan trọng: middleware proxy phải chạy trước middleware thử lại, để mỗi lần thử lại chọn một proxy mới thay vì lặp lại cái đã hỏng. Giữ DOWNLOAD_TIMEOUT thấp — proxy miễn phí là mắt xích chậm nhất trong đường ống — và tăng RETRY_TIMES để hấp thụ tỷ lệ hỏng.
Hướng dẫn liên quan
Giới hạn của ảnh chụp công khai
Proxy công khai miễn phí được dùng chung và vận hành bởi các bên không rõ danh tính. Đừng bao giờ gửi mật khẩu, token hay dữ liệu cá nhân qua chúng. Hãy tuân thủ Chính sách Sử dụng Chấp nhận được của GitHub: không spam, không tấn công, không vượt kiểm soát truy cập, không thu thập trái chính sách của trang.
Proxy công khai miễn phí được dùng chung và vận hành bởi các bên không rõ danh tính. Đừng bao giờ gửi mật khẩu, token hay dữ liệu cá nhân qua chúng. Hãy tuân thủ Chính sách Sử dụng Chấp nhận được của GitHub: không spam, không tấn công, không vượt kiểm soát truy cập, không thu thập trái chính sách của trang.