Skip to content
Advanced / 4 min read

Fortgeschrittenes Web Scraping mit rotierenden Dataimpulse Residential-Proxies und Scrapy unter Linux

Erstellen Sie einen produktionsbereiten Scrapy-Spider, der Dataimpulse Residential-Proxies rotiert, Wiederholungsversuche behandelt und unter Linux skaliert.

Linux SOCKS5 HTTP(S) Web Scraping

Überblick

Scrapy ist ein leistungsstarkes Python-Framework für Web Scraping im großen Maßstab. Dieses Tutorial zeigt, wie Sie rotierende Dataimpulse Residential-Proxies in ein Scrapy-Projekt unter Linux integrieren, mit benutzerdefinierter Middleware für Rotation, Wiederholungslogik und SOCKS5-Unterstützung. Wir behandeln außerdem die Skalierung mit mehreren Spiders.

Voraussetzungen

  • Linux-Server (Ubuntu 20.04+ empfohlen)
  • Python 3.8+
  • Scrapy installiert (pip install scrapy)
  • Dataimpulse Residential-Proxy-Zugangsdaten (HTTP oder SOCKS5)
  • Grundkenntnisse zu Scrapy-Middleware und -Einstellungen

Architektur

Wir verwenden eine benutzerdefinierte Downloader-Middleware, um Proxies pro Anfrage zu rotieren. Dataimpulse bietet einen rotierenden Endpunkt (ein einzelner host:port, der IPs automatisch rotiert) oder eine Liste von Sticky-Session-Endpunkten. Prüfen Sie Ihr Dataimpulse-Dashboard für das genaue Endpunktformat.

Schritte

  1. Richten Sie ein Scrapy-Projekt ein.

    pip install scrapy
    scrapy startproject advanced_scraper
    cd advanced_scraper
    
  2. Speichern Sie Ihre Proxy-Zugangsdaten sicher. Erstellen Sie eine .env-Datei (und fügen Sie sie zu .gitignore hinzu) oder exportieren Sie Umgebungsvariablen:

    export DAI_PROXY_HOST="your-proxy-host"
    export DAI_PROXY_PORT="your-proxy-port"
    export DAI_PROXY_USER="your-username"
    export DAI_PROXY_PASS="your-password"
    
  3. Erstellen Sie eine benutzerdefinierte Proxy-Middleware. Fügen Sie in advanced_scraper/middlewares.py hinzu:

    import os
    from scrapy import signals
    from scrapy.exceptions import NotConfigured
    
    class DataimpulseProxyMiddleware:
        def __init__(self, proxy_url):
            self.proxy_url = proxy_url
    
        @classmethod
        def from_crawler(cls, crawler):
            proxy_host = os.getenv('DAI_PROXY_HOST')
            proxy_port = os.getenv('DAI_PROXY_PORT')
            proxy_user = os.getenv('DAI_PROXY_USER')
            proxy_pass = os.getenv('DAI_PROXY_PASS')
    
            if not all([proxy_host, proxy_port, proxy_user, proxy_pass]):
                raise NotConfigured('Dataimpulse-Proxy-Zugangsdaten fehlen')
    
            proxy_url = f'socks5://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}'
            return cls(proxy_url)
    
        def process_request(self, request, spider):
            request.meta['proxy'] = self.proxy_url
            # Für SOCKS5 benötigt Scrapy das Proxy-Schema in meta
            # Für SOCKS5 sind keine zusätzlichen Header erforderlich
    
  4. Aktivieren Sie die Middleware und konfigurieren Sie die Scrapy-Einstellungen. Aktualisieren Sie in advanced_scraper/settings.py:

    DOWNLOADER_MIDDLEWARES = {
        'advanced_scraper.middlewares.DataimpulseProxyMiddleware': 543,
        # Standard-Proxy-Middleware deaktivieren, falls aktiviert
        'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None,
    }
    
    # Wiederholungseinstellungen
    RETRY_ENABLED = True
    RETRY_TIMES = 5
    RETRY_HTTP_CODES = [500, 502, 503, 504, 522, 524, 408, 429]
    
    # Parallelität und Verzögerung
    CONCURRENT_REQUESTS = 16
    DOWNLOAD_DELAY = 0.5
    
  5. Erstellen Sie einen Spider, der die Middleware verwendet. In advanced_scraper/spiders/example.py:

    import scrapy
    
    class ExampleSpider(scrapy.Spider):
        name = 'example'
        start_urls = ['https://httpbin.org/ip']
    
        def parse(self, response):
            yield {'ip': response.json()['origin']}
    

    Führen Sie ihn aus:

    scrapy crawl example
    

    Die Ausgabe sollte eine Dataimpulse-IP anzeigen.

  6. Implementieren Sie Proxy-Rotation für Sticky-Sessions (optional). Wenn Sie mehrere Sticky-Session-Endpunkte haben, ändern Sie die Middleware, um einen zufälligen Proxy aus einer Liste auszuwählen:

    import random
    
    class RotatingProxyMiddleware:
        def __init__(self, proxy_list):
            self.proxy_list = proxy_list
    
        @classmethod
        def from_crawler(cls, crawler):
            # Liste aus Umgebungsvariablen oder Konfiguration erstellen
            proxy_list = [
                f'socks5://{os.getenv("DAI_PROXY_USER")}:{os.getenv("DAI_PROXY_PASS")}@{host}:{port}'
                for host, port in [('host1', 'port1'), ('host2', 'port2')]
            ]
            return cls(proxy_list)
    
        def process_request(self, request, spider):
            request.meta['proxy'] = random.choice(self.proxy_list)
    
  7. Skalieren Sie mit mehreren Spiders mithilfe von scrapyd. Installieren Sie scrapyd:

    pip install scrapyd scrapyd-client
    

    Stellen Sie Ihr Projekt bereit und planen Sie mehrere Spiders mit unterschiedlichen Proxy-Endpunkten. Verwenden Sie eine Job-Warteschlange, um URLs zu verteilen.

  8. Überwachen und behandeln Sie Fehler. Protokollieren Sie Proxy-Fehler in der Middleware:

    def process_response(self, request, response, spider):
        if response.status in [403, 429]:
            spider.logger.warning(f'Blockiert mit Proxy {request.meta.get("proxy")}')
        return response
    

Fehlerbehebung

  • SOCKS5 funktioniert nicht: Stellen Sie sicher, dass Sie das Schema socks5:// in request.meta['proxy'] verwenden und dass Scrapys HttpProxyMiddleware deaktiviert ist. Scrapy setzt auf txsocksx oder PySocks; installieren Sie bei Bedarf pip install txsocksx.
  • Authentifizierungsfehler: URL-kodieren Sie Sonderzeichen in Benutzername/Passwort.
  • Hohe Sperrraten: Erhöhen Sie die Verzögerung, reduzieren Sie die Parallelität und stellen Sie sicher, dass Sie rotierende Endpunkte verwenden. Ziehen Sie Dataimpulse Sticky-Sessions für Seiten mit Anmeldepflicht in Betracht.
  • Speicherlecks: Überwachen Sie die Speichernutzung von Scrapy mit scrapy stats und starten Sie Spiders regelmäßig neu.

Zusammenfassung

Die Integration von rotierenden Dataimpulse Residential-Proxies mit Scrapy unter Linux umfasst eine benutzerdefinierte Downloader-Middleware, geeignete Wiederholungseinstellungen und optional SOCKS5 für Protokollflexibilität. Durch Skalierung mit scrapyd und Überwachung der Proxy-Leistung können Sie eine robuste Scraping-Pipeline aufbauen. Respektieren Sie stets die Nutzungsbedingungen und robots.txt der Zielwebsites.