Wenn Sie Marktplätze scrapen, Konkurrenzpreise überwachen oder Daten von Websites sammeln, kennen Sie das Problem: Websites blockieren IP-Adressen, verlangen Captchas oder liefern leere Seiten zurück. Die Ban-Rate (Prozentsatz blockierter Anfragen) kann 70-90% erreichen, was das Scraping unmöglich macht. In diesem Artikel behandeln wir konkrete Methoden, die helfen, die Ban-Rate auf 5-10% zu senken und Daten stabil zu sammeln.
Wir betrachten sowohl technische Lösungen (Proxy-Rotation, HTTP-Header, Fingerprinting) als auch Verhaltensmuster (Verzögerungen, Nachahmung von Nutzeraktionen). Alle Methoden wurden in der Praxis beim Scraping von Wildberries, Ozon, Avito und ausländischen Plattformen getestet.
Warum Websites Scraper blockieren: Hauptauslöser
Bevor wir Schutzmethoden besprechen, ist es wichtig zu verstehen, wie Websites automatisierten Traffic erkennen. Moderne Anti-Bot-Systeme (Cloudflare, Akamai, DataDome, Imperva) analysieren Dutzende Parameter jeder Anfrage. Hier sind die Hauptauslöser für Blockierungen:
Auslöser auf Netzwerkebene:
- Zu viele Anfragen von einer IP-Adresse (z.B. 100+ Anfragen pro Minute)
- IP aus bekannten Rechenzentrum-Bereichen (AWS, Google Cloud, Hetzner)
- Geografische Diskrepanz: IP aus Russland fordert englische Website-Version an
- Fehlender Reverse-DNS-Eintrag für die IP-Adresse
Auslöser auf HTTP-Ebene:
- Fehlende oder falsche HTTP-Header (User-Agent, Accept-Language, Referer)
- Header-Reihenfolge weicht vom Browser-Standard ab
- TLS/SSL-Version entspricht nicht dem angegebenen Browser
- Fehlende Cookies oder fehlerhafte Verwendung
Auslöser auf Browser-Ebene (JavaScript):
- Fehlende JavaScript-Ausführung (bei Verwendung eines einfachen HTTP-Clients)
- Browser-Fingerprinting: Canvas, WebGL, AudioContext, installierte Schriftarten
- Fehlende Mausbewegung, Scrollen, Klicks
- Browser-Fenstergröße (Headless-Browser haben oft ungewöhnliche Größen)
- Vorhandensein von Automatisierung: Eigenschaften navigator.webdriver, window.chrome
Verhaltensauslöser:
- Zu schnelle Navigation zwischen Seiten (weniger als 1 Sekunde)
- Gleiche Intervalle zwischen Anfragen (z.B. genau alle 2 Sekunden)
- Sequenzielles Durchlaufen von Seiten (1, 2, 3, 4...) ohne Auslassungen
- Fehlende typische Nutzeraktionen: Suche, Filter, Bildansicht
Beispielsweise beim Scraping von Wildberries ist ein typischer Fehler, Anfragen alle 0,5 Sekunden von einer IP zu senden. Das Cloudflare Anti-Bot-System erkennt das Muster sofort und blockiert die IP für 24 Stunden. Ein echter Nutzer verbringt 5-15 Sekunden mit der Betrachtung einer Produktkarte, scrollt die Seite, klickt auf Bilder.
Proxy-Rotation: Wie man IP-Adressen richtig wechselt
Die Verwendung von Proxys ist eine grundlegende Methode zur Senkung der Ban-Rate. Aber es ist wichtig, nicht nur Proxys zu kaufen, sondern die Rotation richtig zu konfigurieren. Hier sind bewährte Strategien:
Auswahl des Proxy-Typs für Scraping
| Proxy-Typ | Ban-Rate | Geschwindigkeit | Wann verwenden |
|---|---|---|---|
| Rechenzentrum-Proxys | Hoch (40-60%) | Sehr hoch | Einfache Websites ohne Schutz, Massen-Scraping mit großem IP-Pool |
| Residential Proxys | Niedrig (5-15%) | Mittel | Marktplätze (Wildberries, Ozon), Websites mit Cloudflare, soziale Netzwerke |
| Mobile Proxys | Sehr niedrig (2-8%) | Niedrig | Websites mit aggressivem Schutz, mobile App-Versionen |
Für das Scraping von Marktplätzen (Wildberries, Ozon, Avito) werden Residential Proxys empfohlen — sie haben IPs echter Heimnutzer, die schwer von normalem Traffic zu unterscheiden sind. Rechenzentrum-Proxys eignen sich für weniger geschützte Websites oder wenn maximale Geschwindigkeit bei großen Datenmengen erforderlich ist.
Strategien für IP-Rotation
Strategie 1: Zeitbasierte Rotation
Wechseln Sie die IP alle 5-10 Minuten. Dies ist die optimale Balance: lang genug, um keinen Verdacht durch häufige Wechsel zu erregen, aber häufig genug, um keine Anfragenhistorie auf einer IP anzusammeln.
Beispiel: Beim Scraping eines Katalogs mit 1000 Produkten mit 3 Sekunden Intervall zwischen Anfragen wird eine IP etwa 100 Anfragen aktiv sein, dann erfolgt der Wechsel.
Strategie 2: Anfragenbasierte Rotation
Wechseln Sie die IP nach 50-150 Anfragen. Dies hilft, die Ansammlung verdächtiger Aktivität auf einer Adresse zu vermeiden. Fügen Sie Zufälligkeit hinzu: nicht genau 100 Anfragen, sondern zwischen 80 und 120.
Beispiel: Konfigurieren Sie das Skript so, dass nach einer zufälligen Anzahl von Anfragen (80-120) eine Proxy-Rotation aus dem Pool erfolgt.
Strategie 3: Sticky Sessions (Session-Proxys)
Für Websites, die Authentifizierung erfordern oder mit Warenkörben arbeiten, verwenden Sie Sticky Sessions — IP-Fixierung für die Dauer der Session (10-30 Minuten). Dies ermöglicht es, Cookies zu behalten und keinen Verdacht beim IP-Wechsel innerhalb einer Session zu erregen.
Beispiel: Beim Scraping eines persönlichen Kontos auf Ozon verwenden Sie eine IP für den Login und alle nachfolgenden Anfragen innerhalb einer 15-minütigen Session.
Wichtig: Verwenden Sie nicht dieselbe IP für verschiedene Aufgaben. Wenn eine IP beim Scraping einer Website blockiert wurde, verwenden Sie sie nicht sofort für eine andere — warten Sie 24-48 Stunden.
Größe des Proxy-Pools
Die Mindestgröße des Pools hängt von der Scraping-Intensität ab:
- Niedrige Intensität (bis zu 10.000 Anfragen pro Tag): 10-20 Proxys
- Mittlere Intensität (10.000 - 100.000 Anfragen pro Tag): 50-100 Proxys
- Hohe Intensität (mehr als 100.000 Anfragen pro Tag): 200+ Proxys oder Residential mit automatischer Rotation
Für Residential Proxys mit Rotation bei jeder Anfrage (Rotating Proxys) kann die Pool-Größe kleiner sein, da der Anbieter automatisch eine neue IP aus seinem Pool von Millionen Adressen bereitstellt.
User-Agent und HTTP-Header: Nachahmung eines echten Browsers
Selbst mit guten Proxys können Sie blockiert werden, wenn HTTP-Header verdächtig aussehen. Websites analysieren nicht nur den User-Agent, sondern auch die Reihenfolge der Header, ihre Werte und die Übereinstimmung untereinander.
Korrekter User-Agent
Verwenden Sie nicht denselben User-Agent für alle Anfragen. Erstellen Sie eine Liste beliebter Browser und wählen Sie zufällig daraus:
user_agents = [
# Chrome auf Windows
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
# Chrome auf macOS
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
# Firefox auf Windows
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
# Safari auf macOS
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15",
# Edge auf Windows
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
]
Fehler: Veraltete Browser-Versionen verwenden (z.B. Chrome 80) — dies erregt sofort Verdacht. Aktualisieren Sie die User-Agent-Liste alle 2-3 Monate und verfolgen Sie aktuelle Versionen auf whatismybrowser.com.
Vollständiger Satz von HTTP-Headern
Moderne Browser senden 15-20 Header. Hier ist der minimal notwendige Satz zur Nachahmung von Chrome:
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
"Accept-Encoding": "gzip, deflate, br",
"DNT": "1",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Cache-Control": "max-age=0",
"sec-ch-ua": '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"'
}
Beachten Sie die Header Sec-Fetch-* und sec-ch-ua-* — sie erschienen in neuen Chrome-Versionen und ihr Fehlen kann Automatisierung verraten.
Die Reihenfolge der Header ist wichtig
Browser senden Header in einer bestimmten Reihenfolge. Zum Beispiel setzt Chrome immer Host an erste Stelle, dann Connection, User-Agent usw. Wenn Sie die Python-Bibliothek requests verwenden, kann die Reihenfolge alphabetisch sein, was Automatisierung verrät.
Lösung: Verwenden Sie Bibliotheken, die Header korrekt formatieren (curl_cffi für Python, got für Node.js) oder Headless-Browser (Puppeteer, Playwright, Selenium), die Header wie ein echter Browser generieren.
Verzögerungen zwischen Anfragen: Optimale Intervalle
Eine der einfachsten, aber effektivsten Methoden zur Senkung der Ban-Rate sind korrekte Verzögerungen zwischen Anfragen. Ein echter Nutzer kann nicht 10 Seiten pro Sekunde öffnen, daher führen zu schnelle Anfragen sofort zur Blockierung.
Zufällige Verzögerungen statt fester
Verwenden Sie keine feste Verzögerung (z.B. genau 2 Sekunden zwischen Anfragen). Anti-Bot-Systeme erkennen solche Muster leicht. Verwenden Sie ein zufälliges Intervall:
import random
import time
# Statt fester Verzögerung
time.sleep(2) # ❌ Schlecht
# Verwenden Sie ein zufälliges Intervall
delay = random.uniform(2.5, 5.5) # ✅ Gut
time.sleep(delay)
Empfohlene Intervalle für verschiedene Websites
| Website-Typ | Mindestverzögerung | Empfohlene Verzögerung | Beispiele |
|---|---|---|---|
| Marktplätze mit Schutz | 3-5 Sek | 5-10 Sek | Wildberries, Ozon, Lamoda |
| Kleinanzeigen-Portale | 2-4 Sek | 4-8 Sek | Avito, Yula, CIAN |
| Nachrichten-Websites | 1-2 Sek | 2-4 Sek | RBC, Kommersant, Vedomosti |
| API ohne Einschränkungen | 0,5-1 Sek | 1-2 Sek | Offene APIs, RSS-Feeds |
Adaptive Verzögerungen basierend auf Server-Antworten
Ein fortgeschrittener Ansatz — Verzögerungen dynamisch basierend auf Server-Antworten ändern:
base_delay = 3.0 # Basisverzögerung
delay_multiplier = 1.0
response = requests.get(url, headers=headers, proxies=proxies)
# Wenn Captcha oder 429 erhalten — Verzögerung erhöhen
if response.status_code == 429 or 'captcha' in response.text.lower():
delay_multiplier *= 1.5
print(f"Schutz erkannt, Verzögerung auf {base_delay * delay_multiplier}s erhöht")
# Wenn alles gut ist — können etwas beschleunigen
elif response.status_code == 200:
delay_multiplier = max(1.0, delay_multiplier * 0.95)
time.sleep(random.uniform(base_delay * delay_multiplier, base_delay * delay_multiplier * 1.5))
Dieser Ansatz ermöglicht es, automatisch zu verlangsamen, wenn Schutz erkannt wird, und zu beschleunigen, wenn die Website keine Aggression zeigt.
Schutz vor Fingerprinting: Canvas, WebGL, Schriftarten
Wenn die Website JavaScript zur Überprüfung verwendet, reichen einfache HTTP-Header nicht aus. Moderne Anti-Bot-Systeme erstellen einen Browser-"Fingerabdruck" basierend auf Dutzenden von Parametern: Canvas, WebGL, installierten Schriftarten, Zeitzone, Bildschirmauflösung und anderen.
Hauptparameter des Fingerprinting
Canvas Fingerprinting
Die Website zeichnet ein unsichtbares Bild in Canvas und liest es aus. Verschiedene Browser und Betriebssysteme rendern das Bild unterschiedlich und erstellen einen einzigartigen Fingerabdruck. Headless-Browser generieren oft identisches Canvas, was Automatisierung verrät.
WebGL Fingerprinting
Ähnlich wie Canvas, verwendet aber 3D-Rendering. Informationen über Grafikkarte, Treiber, unterstützte Erweiterungen werden ausgelesen. Headless-Browser zeigen oft Software-Rendering (SwiftShader) statt echter GPU.
Installierte Schriftarten
JavaScript kann die Liste installierter Schriftarten ermitteln. Headless-Browser haben normalerweise einen minimalen Satz von Systemschriftarten, was sich von einem echten Nutzer mit installiertem Microsoft Office, Adobe und anderen Programmen unterscheidet.
Navigator-Eigenschaften
Eigenschaften navigator.webdriver, navigator.plugins, navigator.languages verraten Automatisierung. Zum Beispiel ist in Selenium navigator.webdriver === true, was sofort von Anti-Bot-Systemen erkannt wird.
Tools zur Umgehung von Fingerprinting
Zur Umgehung von Fingerprinting verwenden Sie spezialisierte Tools:
- Undetected ChromeDriver (Python) — modifizierte Version von Selenium, die Automatisierungsmerkmale verbirgt
- Puppeteer Stealth (Node.js) — Plugin für Puppeteer, das Fingerprint-Parameter ersetzt
- Playwright mit Stealth — ähnlich wie Puppeteer, aber mit besserer Unterstützung verschiedener Browser
- Anti-Detect-Browser (Dolphin Anty, AdsPower, Multilogin) — für diejenigen, die keinen Code schreiben möchten, ersetzen diese Browser automatisch den Fingerprint
Beispiel für die Verwendung von undetected-chromedriver in Python:
import undetected_chromedriver as uc
# Browser mit Erkennungsschutz erstellen
options = uc.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
driver = uc.Chrome(options=options)
driver.get('https://example.com')
# Prüfen, dass navigator.webdriver === undefined
webdriver_status = driver.execute_script("return navigator.webdriver")
print(f"navigator.webdriver: {webdriver_status}") # Sollte None/undefined sein
Verwaltung von Cookies und Sessions
Viele Websites verwenden Cookies zur Verfolgung des Nutzerverhaltens. Die richtige Verwaltung von Cookies hilft, Blockierungen zu vermeiden und wie ein echter Nutzer auszusehen.
Speichern und Wiederverwenden von Cookies
Statt bei jeder Anfrage eine neue Session zu erstellen, speichern Sie Cookies und verwenden Sie sie wiederholt. Dies ahmt das Verhalten eines echten Nutzers nach, der zur Website zurückkehrt:
import requests
import pickle
session = requests.Session()
# Erster Besuch — Cookies erhalten
response = session.get('https://example.com')
# Cookies in Datei speichern
with open('cookies.pkl', 'wb') as f:
pickle.dump(session.cookies, f)
# Später Cookies laden
with open('cookies.pkl', 'rb') as f:
session.cookies.update(pickle.load(f))
# Jetzt sehen Anfragen wie von einem zurückkehrenden Nutzer aus
response = session.get('https://example.com/catalog')
Session-Aufwärmung vor dem Scraping
Beginnen Sie das Scraping nicht sofort mit Zielseiten. Ahmen Sie das Verhalten eines echten Nutzers nach:
- Öffnen Sie die Startseite der Website
- Warten Sie 2-5 Sekunden
- Öffnen Sie eine Kategorie- oder Bereichsseite
- Warten Sie 3-7 Sekunden
- Erst danach beginnen Sie mit dem Scraping der Zielseiten
Dies erstellt eine Aktivitätshistorie in Cookies und reduziert die Wahrscheinlichkeit einer Blockierung.
Verarbeitung von Session-Cookies und Tokens
Einige Websites generieren beim ersten Besuch eindeutige Tokens und prüfen sie bei nachfolgenden Anfragen. Zum Beispiel verwendet Wildberries ein Token im Header x-requested-with. Speichern Sie solche Tokens immer aus der ersten Antwort und senden Sie sie in nachfolgenden Anfragen.
JavaScript-Rendering: Wann es notwendig ist
Viele moderne Websites laden Inhalte über JavaScript. Wenn Sie einen einfachen HTTP-Client verwenden (requests in Python, axios in Node.js), erhalten Sie eine leere Seite oder einen Platzhalter. In solchen Fällen ist JavaScript-Rendering erforderlich.
Wann JavaScript-Rendering erforderlich ist
- Website verwendet React, Vue, Angular — Inhalte werden nach dem ersten Laden der Seite geladen
- Daten werden über AJAX/Fetch-Anfragen nachgeladen
- Website erfordert JavaScript-Ausführung zur Generierung von Tokens oder Cookies
- Bot-Schutz vorhanden, der JS-Code-Ausführung erfordert (z.B. Cloudflare Challenge)
Tools für JavaScript-Rendering
| Tool | Sprache | Geschwindigkeit | Schutz-Umgehung |
|---|---|---|---|
| Selenium | Python, Java, C# | Langsam | Mittel (mit undetected-chromedriver) |
| Puppeteer | Node.js | Mittel | Gut (mit puppeteer-extra-plugin-stealth) |
| Playwright | Python, Node.js, Java | Schnell | Ausgezeichnet |
| Splash | HTTP API | Mittel | Schwach |
Für die meisten Aufgaben wird Playwright empfohlen — es ist schneller als Selenium, umgeht Schutz besser und hat eine komfortablere API.
Alternative: Abfangen von API-Anfragen
Oft kann JavaScript-Rendering vermieden werden, wenn Sie die API-Anfragen finden, die die Website zum Laden von Daten verwendet. Öffnen Sie DevTools (F12) → Registerkarte Network → Filter XHR/Fetch und sehen Sie, welche Anfragen die Website sendet. Wiederholen Sie dann diese Anfragen direkt über einen HTTP-Client.
Beispiel: Wildberries lädt Produktdaten über die API https://catalog.wb.ru/catalog/.... Statt die gesamte Seite zu rendern, können Sie diese API direkt abfragen, was 10-20 Mal schneller ist.
Captcha-Umgehung: Automatische Lösungen
Selbst mit korrekten Proxys und Headern können Sie auf Captchas stoßen. Es gibt mehrere Ansätze zu ihrer Lösung:
Captcha-Typen und Lösungsmethoden
reCAPTCHA v2 (Häkchen "Ich bin kein Roboter")
Wird über Erkennungsdienste gelöst: 2Captcha, Anti-Captcha, CapMonster. Kosten: $1-3 für 1000 Lösungen. Lösungszeit: 10-30 Sekunden.
reCAPTCHA v3 (unsichtbar, score-basiert)
Komplexer. Analysiert Nutzerverhalten und vergibt einen Score von 0 bis 1. Umgehung: Verwendung von Headless-Browsern mit korrektem Fingerprint + Nachahmung von Nutzeraktionen (Mausbewegung, Klicks).
hCaptcha
Analog zu reCAPTCHA, wird auf vielen Websites verwendet. Wird über dieselben Erkennungsdienste gelöst. Kosten: $0,5-2 für 1000 Lösungen.
Cloudflare Challenge
JavaScript-Challenge, die den Browser überprüft. Umgehung: Verwendung spezialisierter Bibliotheken (cloudscraper für Python, cloudflare-scraper für Node.js) oder Dienste (FlareSolverr).
Integration eines Captcha-Erkennungsdienstes
Beispiel für die Integration von 2Captcha in Python:
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('YOUR_API_KEY')
try:
# reCAPTCHA v2 lösen
result = solver.recaptcha(
sitekey='6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
url='https://example.com'
)
# Lösungs-Token erhalten
captcha_token = result['code']
# Formular mit Token senden
response = requests.post('https://example.com/submit', data={
'g-recaptcha-response': captcha_token
})
except Exception as e:
print(f"Captcha-Lösungsfehler: {e}")
Wichtig: Captcha-Lösung verlangsamt das Scraping um das 10-30-fache und erhöht die Kosten. Verwenden Sie es nur, wenn andere Methoden nicht funktionieren. Versuchen Sie zuerst, Proxys, Fingerprint und Verzögerungen zu verbessern.
Rate Limiting: Wie man Website-Limits nicht überschreitet
Viele Websites haben explizite oder implizite Limits für die Anzahl der Anfragen. Das Überschreiten dieser Limits führt zu temporärer oder permanenter IP-Blockierung.
Bestimmung der Website-Limits
Achten Sie auf HTTP-Header in Server-Antworten:
X-RateLimit-Limit— maximale Anzahl von Anfragen im ZeitraumX-RateLimit-Remaining— wie viele Anfragen übrig sindX-RateLimit-Reset— wann das Limit zurückgesetzt wird (Unix-Zeitstempel)Retry-After— nach wie vielen Sekunden die Anfrage wiederholt werden kann
Wenn Sie den Statuscode 429 (Too Many Requests) erhalten, bedeutet dies eine Limit-Überschreitung. Lesen Sie den Header Retry-After und warten Sie die angegebene Zeit vor der nächsten Anfrage.
Implementierung eines Rate Limiters
Erstellen Sie einen Mechanismus zur Kontrolle der Anfragengeschwindigkeit:
import time
from collections import deque
class RateLimiter:
def __init__(self, max_requests, time_window):
self.max_requests = max_requests # Maximale Anfragen
self.time_window = time_window # Zeitfenster in Sekunden
self.requests = deque()
def wait_if_needed(self):
now = time.time()
# Alte Anfragen entfernen
while self.requests and self.requests[0] < now - self.time_window:
self.requests.popleft()
# Wenn Limit erreicht — warten
if len(self.requests) >= self.max_requests:
sleep_time = self.time_window - (now - self.requests[0])
if sleep_time > 0:
print(f"Rate Limit erreicht, warte {sleep_time:.2f}s")
time.sleep(sleep_time)
self.requests.popleft()
# Aktuelle Anfrage hinzufügen
self.requests.append(time.time())
# Verwendung: maximal 100 Anfragen pro Minute
limiter = RateLimiter(max_requests=100, time_window=60)
for url in urls:
limiter.wait_if_needed()
response = requests.get(url)
Überwachung von Metriken: Ban-Rate verfolgen
Um die Effektivität Ihrer Anti-Ban-Strategien zu bewerten, ist es wichtig, Metriken zu überwachen. Hier sind die wichtigsten Indikatoren:
Wichtige Metriken für Scraping
- Ban Rate — Prozentsatz blockierter Anfragen (Ziel: unter 10%)
- Success Rate — Prozentsatz erfolgreicher Anfragen mit gültigen Daten (Ziel: über 90%)
- Captcha Rate — Prozentsatz der Anfragen, die Captcha erhalten (Ziel: unter 5%)
- Average Response Time — durchschnittliche Antwortzeit (hilft, langsame Proxys zu erkennen)
- Proxy Health — Prozentsatz funktionierender Proxys im Pool
Implementierung der Metrikenerfassung
class ScrapingMetrics:
def __init__(self):
self.total_requests = 0
self.successful_requests = 0
self.blocked_requests = 0
self.captcha_requests = 0
self.response_times = []
def record_request(self, success, blocked=False, captcha=False, response_time=0):
self.total_requests += 1
if success:
self.successful_requests += 1
if blocked:
self.blocked_requests += 1
if captcha:
self.captcha_requests += 1
if response_time > 0:
self.response_times.append(response_time)
def get_stats(self):
if self.total_requests == 0:
return "Keine Anfragen"
ban_rate = (self.blocked_requests / self.total_requests) * 100
success_rate = (self.successful_requests / self.total_requests) * 100
captcha_rate = (self.captcha_requests / self.total_requests) * 100
avg_response_time = sum(self.response_times) / len(self.response_times) if self.response_times else 0
return f"""
Gesamt-Anfragen: {self.total_requests}
Success Rate: {success_rate:.2f}%
Ban Rate: {ban_rate:.2f}%
Captcha Rate: {captcha_rate:.2f}%
Durchschn. Antwortzeit: {avg_response_time:.2f}s
"""
# Verwendung
metrics = ScrapingMetrics()
for url in urls:
start_time = time.time()
try:
response = requests.get(url, proxies=proxy, headers=headers)
response_time = time.time() - start_time
if response.status_code == 200:
if 'captcha' in response.text.lower():
metrics.record_request(success=False, captcha=True, response_time=response_time)
else:
metrics.record_request(success=True, response_time=response_time)
elif response.status_code in [403, 429]:
metrics.record_request(success=False, blocked=True, response_time=response_time)
except Exception as e:
metrics.record_request(success=False, blocked=True)
print(metrics.get_stats())
Vergleich von Scraping-Tools
Die Wahl des richtigen Tools kann die Ban-Rate erheblich beeinflussen. Hier ist ein Vergleich beliebter Lösungen:
| Tool | Ban Rate | Geschwindigkeit | Komplexität | Beste Verwendung |
|---|---|---|---|---|
| Requests + BeautifulSoup | Hoch (50-70%) | Sehr schnell | Niedrig | Einfache statische Websites |
| Scrapy | Mittel (30-50%) | Schnell | Mittel | Großangelegte Projekte, APIs |
| Selenium (Standard) | Mittel (40-60%) | Langsam | Mittel | JS-Websites, Automatisierung |
| Undetected ChromeDriver | Niedrig (10-20%) | Langsam | Niedrig | Geschützte Websites, Cloudflare |
| Playwright | Sehr niedrig (5-15%) | Mittel | Mittel | Moderne Websites, SPA |
| Scraping API (ScraperAPI, Bright Data) | Sehr niedrig (2-10%) | Mittel | Sehr niedrig | Wenn Budget keine Rolle spielt |
Fazit
Die Senkung der Ban-Rate beim Web-Scraping erfordert einen umfassenden Ansatz. Hier ist eine Checkliste der wichtigsten Maßnahmen:
Checkliste zur Senkung der Ban-Rate:
- ✅ Verwenden Sie qualitativ hochwertige Residential oder Mobile Proxys
- ✅ Implementieren Sie intelligente IP-Rotation (zeitbasiert oder anfragenbasiert)
- ✅ Setzen Sie korrekte HTTP-Header mit aktuellen User-Agents
- ✅ Fügen Sie zufällige Verzögerungen zwischen Anfragen hinzu (3-10 Sekunden)
- ✅ Verwenden Sie Tools mit Fingerprinting-Schutz (Playwright, Undetected ChromeDriver)
- ✅ Verwalten Sie Cookies und Sessions korrekt
- ✅ Wärmen Sie Sessions vor dem Scraping auf
- ✅ Überwachen Sie Metriken und passen Sie Strategie an
- ✅ Respektieren Sie Rate Limits der Website
- ✅ Verwenden Sie Captcha-Lösung nur als letzten Ausweg
Denken Sie daran: Das Ziel ist nicht, die Website zu täuschen, sondern legitimen automatisierten Zugriff zu organisieren, der sich minimal von echtem Nutzerverhalten unterscheidet. Beginnen Sie mit einfachen Methoden (Proxys + Verzögerungen) und fügen Sie bei Bedarf komplexere Schutzmechanismen hinzu.
Wenn Sie qualitativ hochwertige Proxys für Scraping benötigen, schauen Sie sich ProxyCove an — wir bieten Residential, Mobile und Rechenzentrum-Proxys mit niedriger Ban-Rate und technischem Support.