
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 = 10Catatan yang menghemat waktu
Urutan penting: middleware proxy harus jalan sebelum middleware retry agar tiap percobaan ulang memilih proxy baru, bukan mengulang yang gagal. Jaga DOWNLOAD_TIMEOUT tetap rendah — proxy gratis adalah bagian paling lambat dalam pipeline — dan naikkan RETRY_TIMES untuk menyerap tingkat kegagalan.
Panduan terkait
Batas cuplikan publik
Proxy publik gratis dipakai bersama dan dioperasikan pihak yang tidak dikenal. Jangan pernah mengirim kata sandi, token, atau data pribadi melaluinya. Patuhi Kebijakan Penggunaan yang Dapat Diterima GitHub: tanpa spam, tanpa serangan, tanpa melewati kontrol akses, tanpa scraping yang melanggar kebijakan situs.
Proxy publik gratis dipakai bersama dan dioperasikan pihak yang tidak dikenal. Jangan pernah mengirim kata sandi, token, atau data pribadi melaluinya. Patuhi Kebijakan Penggunaan yang Dapat Diterima GitHub: tanpa spam, tanpa serangan, tanpa melewati kontrol akses, tanpa scraping yang melanggar kebijakan situs.