Proxys in Python Scrapy einrichten und rotieren
Aktualisiert:
Die asynchrone Twisted-Engine von Scrapy verfügt über eine integrierte HttpProxyMiddleware (mit Priorität 750), die Zeichenketten der Form http://user:pass@ip:port in request.meta['proxy'] automatisch auswertet. Mit einer rund 10 Zeilen kurzen benutzerdefinierten Downloader Middleware auf Priorität 740 können Ihre Spider automatisch über einen Pool unlimitierter statischer IPs von VinaProxy rotieren.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40.000 ₫
- 5+ IPs35.000 ₫
- 10+ IPs25.000 ₫
- 20+ IPs25.000 ₫
- 50+ IPs25.000 ₫
- 100+ IPs25.000 ₫
- 200+ IPs25.000 ₫
- 500+ IPs25.000 ₫
- 1000+ IPs22.000 ₫
- 2000+ IPs20.000 ₫
- 1 IP40.000 ₫
- 5+ IPs35.000 ₫
- 10+ IPs25.000 ₫
- 20+ IPs25.000 ₫
- 50+ IPs25.000 ₫
- 100+ IPs25.000 ₫
- 200+ IPs25.000 ₫
- 500+ IPs25.000 ₫
- 1000+ IPs22.000 ₫
- 2000+ IPs20.000 ₫
Reihenfolge der Scrapy-Proxy-Middleware & Concurrency-Einstellungen
Da die standardmäßige HttpProxyMiddleware mit Priorität 750 arbeitet, um user:pass aus der URL zu entfernen und den Proxy-Authorization-Header zu erzeugen, muss jede eigene Middleware, die request.meta['proxy'] zuweist, mit einer niedrigeren Zahl (z. B. 740) registriert werden:
| Scrapy-Einstellung | Empfohlener Wert | Technischer Zweck |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Leitet den Request über den angegebenen VinaProxy-Proxy-Endpunkt |
| Middleware-Priorität | 740 (vor 750) | Stellt sicher, dass HttpProxyMiddleware den Authentifizierungsheader erzeugt |
CONCURRENT_REQUESTS_PER_IP | 2 bis 4 | Begrenzt parallele Sockets je Proxy-IP, um HTTP 429-Ratenbegrenzungen zu vermeiden |
AUTOTHROTTLE_ENABLED | True | Passt Crawl-Verzögerungen dynamisch an die Reaktionszeit des Zielservers an |
Best Practices für umfangreiche Scrapy-Crawls
- Laden Sie Ihre VinaProxy-Proxyliste in
from_crawler()und weisen Sie inprocess_request()perrequest.meta['proxy'] = random.choice(self.proxies)zufällige IPs zu - Aktivieren Sie
RANDOMIZE_DOWNLOAD_DELAY = Truezusammen mitDOWNLOAD_DELAY = 1.0, damit die Anfrageintervalle je IP unregelmäßig und natürlich wirken - Wählen Sie bei Fehlern (
429oder503) vor dem erneuten Einreihen der Anfrage in die Warteschlange eine alternative Proxy-IP aus Ihrem Pool
Schritt für Schritt
- 1
Proxyliste als http://user:pass@ip:port formatieren
Fügen Sie Ihre VinaProxy-Liste in unseren Proxy-Format-Konverter ein, um standardisierte URL-Strings zu generieren.
- 2
ProxyPoolMiddleware in middlewares.py anlegen
Definieren Sie
process_request(self, request, spider)mitrequest.meta['proxy'] = random.choice(self.proxies). - 3
In settings.py mit Priorität 740 registrieren
Fügen Sie
'myproject.middlewares.ProxyPoolMiddleware': 740unterDOWNLOADER_MIDDLEWARESein und setzen SieCONCURRENT_REQUESTS_PER_IP = 2. - 4
Mit scrapy shell oder scrapy crawl testen
Führen Sie einen Testaufruf an
https://vinaproxy.com/api/my-ipaus, um Rotation und Authentifizierung zu validieren.
Häufig gestellte Fragen
Warum schlug meine eigene Scrapy-Proxy-Middleware mit Priorität 800 fehl?
Die integrierte HttpProxyMiddleware von Scrapy läuft mit Priorität 750. Läuft Ihre Middleware auf 800 (nach 750), werden die Zugangsdaten der URL nicht in einen Proxy-Authorization-Header umgewandelt. Setzen Sie die Priorität stets kleiner als 750 (z. B. 740).
Hält Scrapy dauerhafte Verbindungen zu jedem Proxy aufrecht?
Ja. Der Verbindungspool von Twisted hält persistente TCP-Keep-Alive-Verbindungen zu jedem Proxy-Endpunkt aufrecht, um Verbindungskosten zu senken.
Besteht bei VinaProxy-Proxys ein Datenlimit bei Crawls mit mehreren Millionen Seiten?
Nein. Alle Tarife für dedizierte IPv4- und statische ISP-Proxys von VinaProxy beinhalten unbegrenztes monatliches Datenvolumen.
Skalieren Sie Ihre Scrapy-Spider mit unlimitierten statischen IP-Pools
Sofort einsatzbereite dedizierte IPv4- und statische ISP-Proxys in 7 Ländern.
Scrapy-Proxys kaufen