Web-Scraping mit Python-Anfragen und Proxys
Ein praktischer Scraping-Workflow, der auf Requests und BeautifulSoup basiert, über einen authentifizierten Proxy geleitet, sodass Ihre ursprüngliche IP verborgen bleibt und Ihr Crawler die Ratenlimits übersteht. Vollständig ausführbarer Code enthalten.
Ein Scraper ist eine Sitzung, kein Loop von Abrufen.
Der Unterschied zwischen einem Scraper, der zehn Minuten funktioniert, und einem, der stundenlang läuft, liegt fast nie im Parsen – es ist, wie Sie Anfragen stellen. Ein naiver for url in urls: requests.get(url) öffnet jedes Mal eine frische TCP-Verbindung, sendet keine realistischen Header, speichert keine Cookies und bombardiert das Ziel von einer IP, bis es eine 429 oder eine Sperre erhält.
Die Lösung ist eine requests.Session plus einen Proxy. Eine Sitzung bündelt Verbindungen und speichert Cookies, sodass eine Flut von Seiten schneller ist und wie ein kohärenter Client aussieht. Ein authentifizierter Proxy ersetzt Ihre echte Adresse durch einen Datacenter-Ausgang, sodass die Website Ihre ursprüngliche IP niemals sieht und eine einzelne blockierte Adresse nicht den gesamten Job beendet. s4m-Proxys sprechen SOCKS5 auf Port 1080 und HTTP auf Port 3128, beide authentifiziert mit USER:PASS – verwenden Sie socks5h://, damit DNS remote aufgelöst wird und Hostnamen niemals durchsickern. Für experimentelle Zwecke ist die kostenlose öffentliche Proxyliste ein separater Pool, den Sie auf eigenes Risiko nutzen.
Ein widerstandsfähiger Anfragen-Scraper
Sitzung, realistische Header, Wiederholungen mit Backoff, Proxy-Rotation und BeautifulSoup-Parsing in einer Datei. Ersetzen Sie USER:PASS durch Ihre Anmeldedaten.
import random
import time
import requests
from bs4 import BeautifulSoup
from requests.exceptions import RequestException
USER, PASS, HOST = "USER", "PASS", "proxy.s4m.online"
POOL = [
f"socks5h://{USER}:{PASS}@{HOST}:1080", # needs requests[socks]
f"http://{USER}:{PASS}@{HOST}:3128",
]
HEADERS = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
def make_session(proxy):
s = requests.Session()
s.headers.update(HEADERS)
s.proxies = {"http": proxy, "https": proxy}
return s
def fetch(url, retries=4):
for attempt in range(1, retries + 1):
proxy = random.choice(POOL)
try:
s = make_session(proxy)
r = s.get(url, timeout=(5, 20))
if r.status_code == 429:
raise RequestException("rate limited")
r.raise_for_status()
return r
except RequestException as e:
wait = 2 ** attempt + random.random() # exponential backoff
print(f"[{attempt}/{retries}] {proxy} -> {e}; sleeping {wait:.1f}s")
time.sleep(wait)
raise SystemExit(f"giving up on {url}")
html = fetch("https://quotes.toscrape.com/").text
soup = BeautifulSoup(html, "html.parser")
for q in soup.select(".quote"):
text = q.select_one(".text").get_text(strip=True)
who = q.select_one(".author").get_text(strip=True)
print(f"{who}: {text}")Was einen Crawler am Leben hält
Vier Gewohnheiten, die wichtiger sind als der Parser, den Sie wählen.
Einen echten User-Agent senden
Der Standard-User-Agent von python-requests ist ein sofortiges Warnsignal. Setzen Sie einen normalen Browser-User-Agent und einen Accept-Language-Header, damit die Anfragen sich mit dem normalen Verkehr vermischen.
Gehen Sie zurück, versuchen Sie es nicht blind erneut
Bei einem 429 oder einem Timeout schlafen Sie mit exponentiellem Backoff und Jitter, bevor Sie es erneut versuchen. Enge Wiederholungsloops vertiefen nur die Blockade und verbrauchen Proxy-Verkehr.
Rotieren Sie den Exit, nicht nur den Retry
Wähle bei jedem Versuch einen frischen Proxy aus einem Pool, damit eine markierte IP den Job nicht stoppt. Abgerechnete Rechenzentrums-Proxys machen dies kostengünstig skalierbar.
Respektieren Sie das Ziel
Lesen Sie robots.txt, drosseln Sie die gleichzeitige Nutzung und scrapen Sie nur das, was Ihnen erlaubt ist. Ein höflicher Crawler ist auch schwerer zu blockieren.
Von einem Skript zu einer echten Pipeline
Sobald die Abrufschleife stabil ist, besteht der Rest aus Orchestrierung. Halte einen kleinen Pool von Proxy-URLs und rotiere sie pro Anfrage; wenn ein Ziel aggressiv wird, vergrößere den Pool anstatt die Anzahl der Wiederholungen zu erhöhen. Speichere die Ergebnisse während des Vorgangs, damit ein Fehler während des Laufs dich nicht die gesamte Crawl-Kosten kostet, und füge eine höfliche Verzögerung zwischen den Seiten hinzu, damit du unter dem Ratenlimit bleibst, anstatt dagegen anzukämpfen.
Wenn du ad-hoc-Skripte überwachst, fällt derselbe Proxy-Endpunkt direkt in Scrapy oder einen asynchronen Client — siehe rotierende Proxys in Python für einen aiohttp-Pool. Alles basiert auf denselben s4m-Bausteinen: authentifizierte Datacenter-SOCKS5- und HTTP-Proxys, nach Verbrauch abgerechnet, mit der API und Tools, um Exit-IP-Adressen und Ports zu überprüfen. Wenn du nur schnell ein Land oder Protokoll überprüfen musst, starte von der kostenlosen Liste.
Fragen, beantwortet
Brauche ich PySocks für die SOCKS5-Beispiele?
Ja. SOCKS-Unterstützung in Anfragen kommt von PySocks — installieren Sie es mit pip install "requests[socks]". Der HTTP-Endpunkt auf Port 3128 funktioniert mit einer Standard-Requests-Installation und ohne zusätzliche Abhängigkeiten.
Wie vermeide ich es, beim Scraping blockiert zu werden?
Senden Sie einen realistischen User-Agent, drosseln Sie Ihre Anfragerate, reduzieren Sie bei 429-Antworten und rotieren Sie Ausgangs-IPs durch einen Proxy-Pool. Sperren beziehen sich normalerweise auf Verhalten und IP-Ruf, nicht auf den Parser, den Sie verwenden.
Sind s4m-Proxys residential?
Nein. s4m verkauft authentifizierte Rechenzentrums-SOCKS5- und HTTP-Proxys, die nach Verbrauch abgerechnet werden. Die separate kostenlose öffentliche Proxyliste ist von Dritten und auf eigene Gefahr zu verwenden, nützlich nur für schnelle Tests.
Warum socks5h anstelle von socks5 verwenden?
socks5h fordert den Proxy auf, DNS aufzulösen, sodass die Hostnamen, die Sie scrapen, niemals von Ihrem Gerät geleakt werden. Plain socks5 löst zuerst lokal auf, was Ihre Ziele offenbaren kann.
Proxys, die für Scraping entwickelt wurden
Richten Sie Anfragen an proxy.s4m.online, rotieren Sie durch authentifizierte Datacenter SOCKS5- und HTTP-Ausgänge und zahlen Sie nur für den Traffic, den Sie nutzen. Fügen Sie eine dedizierte IP hinzu, wann immer ein Ziel eine erwartet.
Menschen fanden diese Seite durch die Suche nach
- Web-Scraping mit Python-Anfragen und proxys
- Proxy für Scraping Tutorial
- portweiterleitung über VPNs und proxys
- Proxy für Scraping
- wie man openvpn konfiguriert
- herunterladen Proxy-Einrichtung
- VPN-Kill-Switch
- HTTP-Proxy
- wie kostenlose Proxy-Liste funktioniert
- WireGuard vs OpenVPN
- IP-Adresse
- für ein VPN oder proxy mit krypto bezahlen
- kaufe HTTP-Proxy
Echte Suchphrasen, auf die diese Seite antwortet — die verlinkten öffnen die Seite, die sie ausführlich behandelt.