Das Scraping von Jobbörsen ist eines der gefragtesten Szenarien zur Datensammlung für HR-Analysen, zur Marktbeobachtung und zur Automatisierung des Recruitings. Doch Stellenportale schützen sich aktiv gegen automatisierte Datensammlungen: Sie sperren IPs nach 50-100 Anfragen, zeigen CAPTCHAs an und sperren verdächtige Konten. In diesem Artikel werden wir besprechen, wie man Proxys richtig einrichtet, um stabil von hh.ru, Superjob, LinkedIn und anderen Plattformen ohne Sperren zu scrapen.
Warum blockieren Jobbörsen das Scraping und wie funktioniert der Schutz
Stellenportale verlieren Geld durch Scraping: Daten werden an Wettbewerber verkauft, es entstehen nicht lizenzierte Aggregatoren, und Arbeitgeber umgehen kostenpflichtige Anzeigen. Daher haben alle großen Plattformen mehrstufige Schutzmaßnahmen gegen automatisierte Datensammlungen implementiert.
Hauptschutzmethoden von Jobbörsen:
- Rate Limiting nach IP — hh.ru sperrt IPs nach 80-120 Anfragen pro Stunde, Superjob — nach 50-70 Anfragen. Die Sperre kann von 1 Stunde bis zu einem Tag dauern.
- Fingerprinting des Browsers — Websites analysieren den User-Agent, HTTP-Header, Bildschirmauflösung und installierte Schriftarten. Wenn die Daten nicht mit einem echten Browser übereinstimmen, wird die Anfrage blockiert.
- JavaScript-Überprüfungen — viele Websites verwenden Cloudflare oder eigene Skripte, um zu überprüfen, ob die Anfrage von einem echten Browser und nicht von einem Bot kommt.
- Honeypot-Fallen — versteckte Links und Felder, die nur der Parser sieht. Wenn der Bot darauf klickt, wird die IP auf die schwarze Liste gesetzt.
- CAPTCHA bei verdächtiger Aktivität — erscheint nach einer Reihe schneller Anfragen oder bei Verwendung von Rechenzentrums-IP.
Ohne Proxys können Sie maximal 100-200 Stellenangebote scrapen, danach wird Ihre IP gesperrt. Für eine umfangreiche Datensammlung (Tausende von Stellenangeboten täglich) werden Proxys zu einem unverzichtbaren Werkzeug.
Wichtig: Das Scraping muss den Nutzungsbedingungen der Website entsprechen. Viele Jobbörsen bieten offizielle APIs für den legalen Zugang zu Daten an. Zum Beispiel hat hh.ru eine kostenlose API mit Anfrage-Limits, die für die meisten Aufgaben geeignet ist.
Welchen Proxytyp für das Scraping von Stellenangeboten wählen
Die Wahl des Proxytyps hängt vom Umfang des Scrapings, dem Budget und den Geschwindigkeitsanforderungen ab. Lassen Sie uns drei Hauptvarianten mit konkreten Nutzungsszenarien betrachten.
| Proxytyp | Geschwindigkeit | Sperrrisiko | Wann verwenden |
|---|---|---|---|
| Rechenzentrums-Proxys | Hoch (50-200 ms) | Hoch | Testen des Parsers, Sammeln öffentlicher Daten ohne Authentifizierung |
| Residential-Proxys | Mittel (200-800 ms) | Niedrig | Umfangreiches Scraping von hh.ru, Superjob mit IP-Rotation |
| Mobile Proxys | Mittel (300-1000 ms) | Sehr niedrig | Scraping mit Authentifizierung, Umgehung strenger LinkedIn-Schutzmaßnahmen |
Rechenzentrums-Proxys für das Scraping
Dies ist die schnellste und günstigste Option, aber mit Einschränkungen. Rechenzentrums-IPs werden von Websites leicht erkannt, daher eignen sie sich nur für einfache Aufgaben: Scraping von Stellenlisten ohne Authentifizierung, Sammeln öffentlicher Daten, Testen des Parsers vor dem Einsatz von Residential-Proxys.
Wann Rechenzentrums-Proxys funktionieren:
- Scraping kleiner Datenmengen (bis zu 500 Stellenangeboten pro Tag)
- Sammeln von Daten von Websites ohne strengen Schutz (kleine regionale Jobbörsen)
- Verwendung offizieller APIs mit IP-Rotation zur Umgehung von Rate Limits
- Scraping von RSS-Feeds und XML-Dateien von Stellenangeboten
Für hh.ru und Superjob werden Rechenzentrums-Proxys instabil arbeiten: Sie erhalten ein CAPTCHA nach 20-30 Anfragen, und viele IPs sind bereits auf den schwarzen Listen dieser Websites.
Residential-Proxys — die optimale Wahl für Jobbörsen
Residential-Proxys verwenden IP-Adressen von echten Haushaltsnutzern, daher werden sie von Websites als normale Besucher wahrgenommen. Dies ist das optimale Preis-Leistungs-Verhältnis für das Scraping von Stellenangeboten.
Vorteile für das Scraping von Jobbörsen:
- Niedriges Blockierungsrisiko — hh.ru und Superjob können den Residential-IP nicht von einem echten Benutzer unterscheiden
- Großer Pool von IP-Adressen — Rotation kann für jede Anfrage oder alle 5-10 Minuten eingestellt werden
- Geografische Bindung — es können Stellenangebote aus einer bestimmten Stadt gescrapet werden, indem IPs aus dieser Region verwendet werden
- Stabilität — eine Residential-IP kann 200-500 Anfragen ohne Blockierung verarbeiten
Für umfangreiches Scraping (mehr als 1000 Stellenangebote pro Tag) sind Residential-Proxys mit IP-Rotation die Standardlösung. Sie richten die IP-Wechsel alle 5-10 Minuten ein, fügen zufällige Verzögerungen zwischen den Anfragen (3-7 Sekunden) hinzu und erhalten eine stabile Datensammlung ohne Blockierungen.
Mobile Proxys für LinkedIn und Scraping mit Authentifizierung
Mobile Proxys verwenden IPs von Mobilfunkanbietern. Ihr Hauptvorteil ist, dass eine IP von Hunderten von echten Nutzern gleichzeitig verwendet wird, sodass Websites diese Adresse nicht ohne Risiko für die Blockierung Tausender normaler Besucher sperren können.
Wann mobile Proxys benötigt werden:
- Scraping von LinkedIn — diese Plattform hat den strengsten Schutz gegen Bots und blockiert aggressiv Rechenzentrums- und sogar Residential-IPs
- Arbeiten mit Authentifizierung — wenn Sie geschlossene Stellenangebote oder Profildaten scrapen müssen, reduzieren mobile IPs das Risiko einer Kontosperrung
- Scraping ausländischer Jobbörsen — Indeed, Glassdoor, Monster verwenden fortschrittliche Schutzsysteme, bei denen mobile IPs zuverlässiger arbeiten
- Umgehung strenger Blockierungen — wenn Ihre Residential-Proxys beginnen, CAPTCHAs zu erhalten, wird der Wechsel zu mobilen Proxys das Problem lösen
Der Nachteil von mobilen Proxys sind die hohen Kosten und die geringere Geschwindigkeit. Aber für kritische Aufgaben, bei denen eine Blockierung nicht akzeptabel ist, sind sie die beste Wahl.
Besonderheiten des Scraping von hh.ru: Schutz und Umgehungsmethoden
hh.ru ist die größte russische Stellenbörse mit dem fortschrittlichsten Schutz gegen Scraping unter den einheimischen Jobbörsen. Die Website verwendet eine Kombination aus Rate Limiting, Fingerprinting und Verhaltensanalyse, um Bots zu identifizieren.
Wie der Schutz von hh.ru funktioniert
1. Limits nach IP-Adresse: Nach 80-120 Anfragen pro Stunde von einer IP beginnt die Website, CAPTCHAs anzuzeigen oder gibt HTTP 429 (Too Many Requests) zurück. Die Sperre dauert je nach Aggressivität des Scrapings von 1 bis 6 Stunden.
2. Überprüfung von User-Agent und Headern: hh.ru analysiert die HTTP-Header der Anfragen. Wenn der User-Agent nicht mit einem echten Browser übereinstimmt oder Standardheader (Accept-Language, Accept-Encoding) fehlen, wird die Anfrage blockiert.
3. JavaScript-Überprüfungen: Einige Seiten von hh.ru erfordern die Ausführung von JavaScript, um Daten zu laden. Ein einfacher HTTP-PARSER ohne Headless-Browser kann den vollständigen Inhalt nicht abrufen.
4. Honeypot-Links: Auf den Seiten gibt es versteckte Elemente, die nur der Parser sieht. Wenn Ihr Skript auf diese Links klickt, wird die IP für 24 Stunden auf die schwarze Liste gesetzt.
Strategie zur Umgehung des Schutzes von hh.ru mit Proxys
Für ein stabiles Scraping von hh.ru ohne Blockierungen verwenden Sie die folgende Konfiguration:
Optimale Einstellung für das Scraping von hh.ru:
- Proxytyp: Residential mit IP-Rotation alle 5-10 Minuten
- Verzögerung zwischen Anfragen: 4-8 Sekunden (zufälliger Wert)
- User-Agent: Rotation von realen User-Agents moderner Browser (Chrome, Firefox, Safari der neuesten Versionen)
- Header: Vollständiger Satz von Standardbrowser-Headern (Accept, Accept-Language, Accept-Encoding, Referer)
- Cookies: Speicherung und Übertragung von Cookies zwischen Anfragen innerhalb einer Sitzung
- Anfrage-Limit: Nicht mehr als 60-80 Anfragen pro IP, danach Wechsel des Proxys
Beispiel für eine sichere Handlungssequenz:
- Verbinden Sie sich mit einem Residential-Proxy mit einer IP aus der gewünschten Region (z.B. Moskau)
- Führen Sie die erste Anfrage an die Startseite von hh.ru durch, erhalten und speichern Sie die Cookies
- Warten Sie 5-7 Sekunden (Simulation des Lesens der Seite)
- Führen Sie eine Anfrage an die Seite mit den Stellenangeboten mit den gewünschten Filtern durch
- Scrapen Sie die Liste der Stellenangebote (normalerweise 20-50 pro Seite)
- Für jedes Stellenangebot führen Sie eine Anfrage an die Detailseite mit einer Verzögerung von 4-6 Sekunden durch
- Nach 60-70 Anfragen wechseln Sie den Proxy und wiederholen den Zyklus
Mit dieser Strategie können Sie 1000-2000 Stellenangebote pro Tag von einem Stream ohne eine einzige Blockierung scrapen. Wenn ein größeres Volumen benötigt wird, starten Sie mehrere parallele Streams mit unterschiedlichen Proxys.
Tipp: hh.ru bietet eine kostenlose API für den Zugang zu Stellenangeboten. Für die meisten Aufgaben (Arbeitsmarktanalyse, Gehaltsüberwachung) wird die API eine stabilere Lösung sein als das Scraping von HTML. Proxys können zur IP-Rotation bei der Arbeit mit der API verwendet werden, um Rate Limits zu umgehen.
Scraping von Superjob, LinkedIn und ausländischen Plattformen
Superjob: Besonderheiten des Schutzes
Superjob hat einen weniger strengen Schutz im Vergleich zu hh.ru, kämpft aber dennoch aktiv gegen Scraping. Die Hauptunterschiede sind:
- Niedrigeres Rate Limit: Die Blockierung tritt nach 50-70 Anfragen pro Stunde ein (im Vergleich zu 80-120 bei hh.ru)
- Weniger strenge Header-Überprüfung: Es kann ein vereinfachter Satz von Headern verwendet werden
- Keine JavaScript-Schutzmaßnahmen: Die meisten Daten sind über einfache HTTP-Anfragen ohne Headless-Browser zugänglich
- Regionale Blockierung: Einige Stellenangebote sind nur mit einer IP aus einer bestimmten Region verfügbar
Für Superjob reichen Residential-Proxys mit Rotation alle 10-15 Minuten und einer Verzögerung zwischen den Anfragen von 3-5 Sekunden aus. Dies ermöglicht ein stabiles Scraping von 500-1000 Stellenangeboten pro Tag.
LinkedIn: der strengste Schutz
LinkedIn ist eine eigene Geschichte. Die Plattform verwendet fortschrittliche Algorithmen des maschinellen Lernens zur Identifizierung von Bots und hat eines der aggressivsten Schutzsysteme unter allen sozialen Netzwerken und Jobbörsen.
Besonderheiten des Schutzes von LinkedIn:
- Erforderliche Authentifizierung: Die meisten Daten sind nur für authentifizierte Benutzer zugänglich
- Verhaltensanalyse: LinkedIn analysiert Verhaltensmuster: Scrollgeschwindigkeit, Mausbewegungen, Zeit auf der Seite
- Blockierung von Konten: Bei verdächtiger Aktivität wird nicht nur die IP, sondern auch das Konto selbst blockiert
- Beschränkungen für Profilansichten: Kostenlose Konten können eine begrenzte Anzahl von Profilen pro Monat ansehen
- Erforderliche Ausführung von JavaScript: Ohne Headless-Browser ist das Scraping unmöglich
Strategie für das Scraping von LinkedIn:
- Verwenden Sie mobile Proxys — sie bieten das niedrigste Risiko einer Blockierung. Eine mobile IP kann für 100-200 Profilansichten pro Tag verwendet werden.
- Headless-Browser ist erforderlich — verwenden Sie Puppeteer oder Playwright mit der Einstellung eines echten Browser-Fingerprints (Bildschirmauflösung, WebGL, Canvas).
- Langsame Scraping-Geschwindigkeit — nicht mehr als 20-30 Profile pro Stunde von einem Konto. Fügen Sie Verzögerungen von 10-20 Sekunden zwischen den Ansichten hinzu.
- Simulation realen Verhaltens — Scrollen der Seite, zufällige Klicks, Wechsel zwischen den Abschnitten des Profils.
- Aufwärmen von Konten — neue LinkedIn-Konten dürfen nicht sofort zum Scraping verwendet werden. Es ist notwendig, 1-2 Wochen lang die Aktivität eines normalen Benutzers zu simulieren.
- Rotation von Konten — verwenden Sie mehrere Konten mit unterschiedlichen Proxys, um die Last zu verteilen.
Das Scraping von LinkedIn ist die schwierigste Aufgabe unter allen Jobbörsen. Wenn Sie Daten von dieser Plattform benötigen, ziehen Sie die Verwendung der offiziellen Sales Navigator API oder von Drittanbieterdiensten in Betracht, die Daten legal bereitstellen.
Ausländische Jobbörsen: Indeed, Glassdoor, Monster
Ausländische Plattformen haben in der Regel einen strengeren Schutz als russische Websites (außer hh.ru). Die Hauptmerkmale sind:
- Indeed — verwendet Cloudflare mit JavaScript-Überprüfungen. Ein Headless-Browser und Residential/Mobile Proxys aus dem Land, in dem Sie Stellenangebote scrapen, sind erforderlich.
- Glassdoor — erfordert eine Authentifizierung, um die meisten Daten anzuzeigen. Blockiert aktiv Rechenzentrums-IPs. Verwenden Sie Residential-Proxys und eine langsame Scraping-Geschwindigkeit (Verzögerung von 8-12 Sekunden).
- Monster — hat eine API für Partner, aber für das Scraping von HTML sind Residential-Proxys mit geografischer Bindung an das benötigte Land erforderlich.
Für alle ausländischen Plattformen ist die geografische Bindung der Proxys von entscheidender Bedeutung. Wenn Sie Stellenangebote in den USA scrapen, verwenden Sie amerikanische Residential-IPs. Anfragen von IPs aus anderen Ländern können Verdacht erregen und zu Blockierungen führen.
Einrichtung der IP-Rotation und Verzögerungen zwischen Anfragen
Die richtige Einrichtung der Proxy-Rotation ist der Schlüssel zu stabilem Scraping ohne Blockierungen. Lassen Sie uns zwei Hauptstrategien betrachten: Rotation bei jeder Anfrage und zeitbasierte Rotation.
Rotation bei jeder Anfrage (Rotating Proxies)
Bei diesem Ansatz erfolgt jede HTTP-Anfrage von einer neuen IP-Adresse. Dies ist die sicherste Methode, hat jedoch Einschränkungen:
Vorteile:
- Es ist unmöglich, die Aktivität einer einzelnen IP nachzuverfolgen
- Es können mehr Anfragen pro Zeiteinheit gestellt werden
- Es ist nicht notwendig, die Limits für jede IP zu überwachen
Nachteile:
- Es ist unmöglich, eine Sitzung (Cookies gehen bei IP-Wechsel verloren) zu speichern
- Nicht geeignet für Scraping mit Authentifizierung
- Einige Websites blockieren Anfragen, wenn die IP zu häufig wechselt
Die Rotation bei jeder Anfrage eignet sich für das Scraping öffentlicher Seiten von hh.ru und Superjob ohne Authentifizierung. Sie wird über den Parameter des Proxy-Anbieters eingerichtet (normalerweise handelt es sich um einen speziellen Endpunkt mit automatischer Rotation).
Zeitbasierte Rotation (Sticky Sessions)
Bei diesem Ansatz wird eine IP für einen bestimmten Zeitraum (5-30 Minuten) verwendet, bevor sie automatisch gewechselt wird. Dies ist die optimale Option für die meisten Scraping-Aufgaben von Jobbörsen.
Empfohlene Rotationsintervalle:
| Website | Rotationsintervall | Max. Anfragen pro IP | Verzögerung zwischen Anfragen |
|---|---|---|---|
| hh.ru | 5-10 Minuten | 60-80 | 4-8 Sekunden |
| Superjob | 10-15 Minuten | 50-70 | 3-5 Sekunden |
| 30-60 Minuten | 20-40 | 10-20 Sekunden | |
| Indeed | 10-20 Minuten | 40-60 | 5-10 Sekunden |
| Glassdoor | 15-30 Minuten | 30-50 | 8-12 Sekunden |
Einrichtung zufälliger Verzögerungen
Eine feste Verzögerung zwischen Anfragen (z.B. genau 5 Sekunden) sieht für die Schutzsysteme verdächtig aus. Ein echter Benutzer kann nicht mit solcher Präzision handeln. Verwenden Sie immer zufällige Verzögerungen im Bereich.
Beispiele für die Implementierung zufälliger Verzögerungen:
// Python
import time
import random
# Verzögerung von 4 bis 8 Sekunden
delay = random.uniform(4, 8)
time.sleep(delay)
# Komplexere Logik: manchmal eine lange Pause einlegen
if random.random() < 0.1: # 10% Wahrscheinlichkeit
time.sleep(random.uniform(15, 30)) # Simulation einer Ablenkung des Benutzers
else:
time.sleep(random.uniform(4, 8))
// JavaScript / Node.js
const sleep = (min, max) => {
const delay = Math.random() * (max - min) + min;
return new Promise(resolve => setTimeout(resolve, delay * 1000));
};
// Verwendung
await sleep(4, 8); // Verzögerung 4-8 Sekunden
// Mit einer Wahrscheinlichkeit für eine lange Pause
if (Math.random() < 0.1) {
await sleep(15, 30); // 10% Wahrscheinlichkeit für eine lange Pause
} else {
await sleep(4, 8);
}
Das Hinzufügen zufälliger langer Pausen (15-30 Sekunden) mit einer Wahrscheinlichkeit von 5-10% macht das Verhalten des Parsers noch ähnlicher dem eines echten Benutzers, der möglicherweise durch einen Telefonanruf oder eine andere Aufgabe abgelenkt wird.
Verarbeitung von CAPTCHAs und anderen Sperren
Selbst bei richtiger Einrichtung der Proxys und Verzögerungen können Sie auf CAPTCHAs oder andere Arten von Sperren stoßen. Lassen Sie uns besprechen, wie man richtig auf diese Situationen reagiert.
Arten von Sperren bei Jobbörsen
1. HTTP 429 Too Many Requests — die häufigste Art von Sperre. Die Website teilt Ihnen klar mit, dass Sie das Anfrage-Limit überschritten haben. In der Regel gibt es im Antwortheader einen Retry-After, der angibt, nach wie vielen Sekunden die Anfrage wiederholt werden kann.
Wie man damit umgeht: Sofort den Proxy wechseln und die aktuelle IP für die Zeit, die im Retry-After angegeben ist (normalerweise 1-6 Stunden), auf die schwarze Liste setzen. Wenn Retry-After fehlt, setzen Sie die IP für 2 Stunden auf die schwarze Liste.
2. HTTP 403 Forbidden — IP ist auf Serverebene blockiert. Dies ist eine ernstere Sperre, die von mehreren Stunden bis zu einem Tag dauern kann.
Wie man damit umgeht: Proxy wechseln und die IP auf die langfristige schwarze Liste setzen (24 Stunden). Überprüfen Sie die Protokolle: Möglicherweise scrapen Sie zu aggressiv oder verwenden Rechenzentrums-IPs, wo Residential-IPs erforderlich sind.
3. CAPTCHA (CAPTCHA) — die Website zeigt die Überprüfung "Ich bin kein Roboter" an. Dies bedeutet, dass Ihr Verhalten verdächtig erschien, die IP jedoch noch nicht vollständig blockiert ist.
Wie man damit umgeht: Es gibt drei Optionen:
- Proxy wechseln — der einfachste Weg. Die aktuelle IP wird für 6-12 Stunden auf die schwarze Liste gesetzt.
- Automatische CAPTCHA-Lösung — Verwendung von Diensten wie 2Captcha, Anti-Captcha, CapSolver. Diese kosten $1-3 für 1000 Lösungen.
- Manuelle Lösung — wenn das Scraping zeitlich nicht kritisch ist, können Sie die CAPTCHA zur manuellen Lösung an einen Operator senden.
4. Cloudflare Challenge — JavaScript-Überprüfung, die die Ausführung von Code im Browser erfordert. Eine gewöhnliche HTTP-Bibliothek wird diese Überprüfung nicht bestehen.
Wie man damit umgeht: Verwenden Sie einen Headless-Browser (Puppeteer, Playwright, Selenium) mit der Einstellung eines echten Fingerprints. Bibliotheken wie puppeteer-extra-plugin-stealth helfen, die Erkennung des Headless-Modus zu umgehen.
Integration von CAPTCHA-Lösungsdiensten
Wenn Sie sich entschieden haben, CAPTCHAs automatisch zu lösen, hier ein Beispiel für die Integration mit dem beliebten Dienst 2Captcha:
// Python unter Verwendung der 2captcha-python-Bibliothek
from twocaptcha import TwoCaptcha
import requests
solver = TwoCaptcha('YOUR_API_KEY')
try:
# Lösung von reCAPTCHA v2
result = solver.recaptcha(
sitekey='6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
url='https://hh.ru/search/vacancy',
proxy={
'type': 'HTTPS',
'uri': 'login:password@ip:port'
}
)
# Erhalten des Lösungstokens
captcha_token = result['code']
# Anfrage mit Token senden
response = requests.post(
'https://hh.ru/search/vacancy',
data={
'g-recaptcha-response': captcha_token,
# andere Formularparameter
},
proxies={
'http': 'http://login:password@ip:port',
'https': 'http://login:password@ip:port'
}
)
except Exception as e:
print(f'Fehler bei der CAPTCHA-Lösung: {e}')
Das Lösen einer CAPTCHA dauert 10-30 Sekunden und kostet etwa $0.001-0.003. Für umfangreiches Scraping kann dies teuer werden, daher ist es besser, das Scraping so einzurichten, dass CAPTCHAs so selten wie möglich auftreten.
Überwachungssystem und Alarme
Für den stabilen Betrieb des Parsers ist es wichtig, die Überwachung von Blockierungen und automatische Alarme einzurichten:
Was überwacht werden sollte:
- Prozentsatz erfolgreicher Anfragen — wenn dieser unter 90% fällt, sollten Sie die Proxys und Einstellungen überprüfen
- Anzahl der CAPTCHAs pro Stunde — wenn mehr als 5-10, scrapen Sie zu aggressiv
- Durchschnittliche Antwortzeit der Proxys — wenn diese plötzlich ansteigt, sind die Proxys möglicherweise überlastet
- Anzahl der 429/403-Fehler — Indikator für die Qualität der Proxys und die Richtigkeit der Einstellungen
- Liste der blockierten IPs — wenn dieselbe IP ständig blockiert wird, schließen Sie sie aus dem Pool aus
Richten Sie die Benachrichtigung (Telegram, E-Mail, Slack) ein, wenn der Prozentsatz erfolgreicher Anfragen unter einen Schwellenwert fällt. Dies ermöglicht eine schnelle Reaktion auf Probleme und verhindert, dass Zeit beim Scraping verloren geht.
Einrichtung von Proxys in beliebten Scraping-Tools
Lassen Sie uns besprechen, wie man Proxys in den beliebtesten Tools für das Scraping von Jobbörsen einrichtet: Python (requests, Scrapy), Node.js (axios, Puppeteer) und fertigen Lösungen.
Python: requests und Scrapy
Python ist die beliebteste Sprache für das Scraping dank der Bibliotheken requests, BeautifulSoup und Scrapy.
Beispiel mit der requests-Bibliothek:
import requests
import random
import time
# Liste der Proxys (von Ihrem Anbieter erhalten)
PROXIES = [
'http://user:[email protected]:8080',
'http://user:[email protected]:8080',
'http://user:[email protected]:8080'
]
# Liste der User-Agents zur Rotation
USER_AGENTS = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36'
]
def parse_vacancy(url):
proxy = random.choice(PROXIES)
user_agent = random.choice(USER_AGENTS)
headers = {
'User-Agent': user_agent,
'Accept': 'text/html,application/xhtml+xml',
'Accept-Language': 'de-DE,de;q=0.9,en;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive'
}
proxies = {
'http': proxy,
'https': proxy
}
try:
response = requests.get(
url,
headers=headers,
proxies=proxies,
timeout=30
)
if response.status_code == 200:
return response.text
elif response.status_code == 429:
print(f'Rate Limit für {proxy}, Proxy wird gewechselt')
# Proxy vorübergehend aus der Liste entfernen
return None
else:
print(f'Fehler {response.status_code}')
return None
except Exception as e:
print(f'Fehler bei der Anfrage: {e}')
return None
# Verwendung
for i in range(100):
html = parse_vacancy('https://hh.ru/vacancy/123456')
if html:
# Datenverarbeitung
pass
# Zufällige Verzögerung
time.sleep(random.uniform(4, 8))
Beispiel für die Einrichtung von Scrapy:
# settings.py
# Aktivieren Sie die Unterstützung für Proxys
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
'scrapy_rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'scrapy_rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}
# Liste der Proxys
ROTATING_PROXY_LIST = [
'http://user:[email protected]:8080',
'http://user:[email protected]:8080',
'http://user:[email protected]:8080'
]
# Automatische Erkennung von Sperren
ROTATING_PROXY_BAN_POLICY = 'scrapy_rotating_proxies.policy.BanDetectionPolicy'
# Verzögerung zwischen Anfragen
DOWNLOAD_DELAY = 5
RANDOMIZE_DOWNLOAD_DELAY = True # Zufällige Verzögerung ±50%
# Rotation des User-Agents
DOWNLOADER_MIDDLEWARES.update({
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'scrapy_user_agents.middlewares.RandomUserAgentMiddleware': 400,
})
# Maximale gleichzeitige Anfragen
CONCURRENT_REQUESTS = 4
CONCURRENT_REQUESTS_PER_DOMAIN = 1
Node.js: Puppeteer mit Proxys
Für das Scraping von Websites mit JavaScript (LinkedIn, Indeed) ist ein Headless-Browser erforderlich. Puppeteer ist die beliebteste Lösung für Node.js.
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
// Plugin zur Umgehung der Erkennung von Headless-Browsern
puppeteer.use(StealthPlugin());
async function parseWithProxy() {
const proxy = 'http://user:[email protected]:8080';
const browser = await puppeteer.launch({
headless: true,
args: [
`--proxy-server=${proxy}`,
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-blink-features=AutomationControlled'
]
});
const page = await browser.newPage();
// Setzen Sie den echten User-Agent
await page.setUserAgent(
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
);
// Setzen Sie die Seite und führen Sie das Scraping durch
// ...
}