Wer in den letzten Jahren versucht hat, Reddit-Daten im großen Stil zu sammeln, kennt das Problem: Die offizielle API ist teuer geworden, Rate-Limits sind restriktiv, und der Zugriff auf öffentliche Daten fühlt sich an wie ein Hindernislauf. Doch die Daten sind da — öffentlich zugänglich und für Marktforschung, Sentiment-Analyse und Trend-Tracking extrem wertvoll. Dieser Guide zeigt Ihnen, wie Sie Reddit mit Proxys scrapen, effizient und zuverlässig.
Wichtiger Hinweis: Dieser Artikel richtet sich ausschließlich an den Zugriff auf öffentlich verfügbare Daten. Respektieren Sie die Nutzungsbedingungen (Terms of Service) von Reddit sowie geltende Gesetze wie den CFAA in den USA und die DSGVO in der EU. Wenn Reddit eine offizielle API für Ihren Anwendungsfall anbietet, sollten Sie diese nutzen. Scraping ist keine Erlaubnis, private Daten zu sammeln oder Zugangsbeschränkungen zu umgehen.
Die Reddit-API-Landschaft im Wandel
Bis 2023 war die Reddit-API ein Traum für Entwickler: kostenlos, großzügige Rate-Limits und umfassender Zugriff auf Posts, Kommentare und Metadaten. Dann kam der Einschnitt, der die Landschaft grundätzlich verändert hat.
Die API-Preisänderungen von 2023
Im April 2023 kündigte Reddit neue API-Preise an: bis zu 24.000 USD für 50 Millionen API-Calls. Für Daten-Teams, die Millionen von Posts und Kommentaren analysieren, wurde die API plötzlich unwirtschaftlich. Beliebte Third-Party-Clients wie Apollo und Reddit is Fun mussten schließen. Die Botschaft war klar: Wer große Datenmengen braucht, muss entweder tief in die Tasche greifen — oder alternative Zugangswege finden.
Offizielle API-Quotas und ihre Grenzen
Auch mit kostenlosem API-Zugang gelten strenge Limits:
- 100 Requests pro Minute pro OAuth-Client (authentifiziert)
- 10 Requests pro Minute für nicht authentifizierte Zugriffe
- Rate-Limit-Header (
x-ratelimit-remaining,x-ratelimit-reset) geben Aufschluss über verbleibende Kontingente - Bestimmte Endpunkte (z. B. Search) sind stärker limitiert als andere
Für kleine Projekte mag das ausreichen. Für Sentiment-Analyse über tausende Subreddits oder kontinuierliches Trend-Monitoring reicht das Kontingent jedoch nicht ansatzweise. Deshalb wenden sich zunehmend Daten-Teams dem Web-Scraping zu — mit Proxys als entscheidender Infrastrukturkomponente.
Welche Reddit-Daten sind öffentlich zugänglich?
Nicht alle Reddit-Daten sind gleich. Einige sind frei im Browser zugänglich, andere erfordern Login oder sind durch API-Beschränkungen geschützt. Hier ein Überblick über das, was Sie ohne Anmeldung scrapen können:
Subreddit-Feeds und Post-Seiten
Jeder öffentliche Subreddit-Feed ist über https://www.reddit.com/r/{subreddit}/ erreichbar. Die HTML-Seite enthält Posts mit Titeln, Scores, Autor-Namen und Zeitstempeln. Die JSON-Variante (.json an die URL anhängen) liefert strukturierte Daten, ist aber stärker rate-limitiert als die HTML-Version.
Kommentar-Threads
Einzelne Post-Seiten unter /r/{subreddit}/comments/{id}/ enthalten den vollständigen Kommentar-Thread. Bei sehr langen Threads lädt Reddit Kommentare dynamisch nach — hier ist die JSON-API oder old.reddit.com hilfreicher, da alle Inhalte im initialen Response enthalten sind.
Suchergebnisse
Reddits Suchfunktion unter /search/ ist öffentlich zugänglich, aber stark rate-limitiert. Such-Scraping erfordert besonders vorsichtige Rate-Limit-Strategien und längere Delays zwischen Requests.
Nutzerprofile
Öffentliche Nutzerprofile unter /user/{username}/ zeigen Posts und Kommentare eines Nutzers. Einige Nutzer haben ihre Profile auf privat gestellt — diese sind dann nicht scrapbar und sollten respektiert werden.
old.reddit.com als scraping-freundliche Alternative
old.reddit.com ist der Geheimtipp für Reddit-Daten-Scraping. Die alte Oberfläche bietet mehrere entscheidende Vorteile:
- Schlankere HTML-Struktur — weniger JavaScript, schneller zu parsen
- Kein SPA-Rendering — alle Inhalte sind im initialen HTML-Response enthalten, kein Headless Browser nötig
- Klassischere Rate-Limits — oft großzügiger als die neue Oberfläche
- Konsistente DOM-Struktur — leichter mit BeautifulSoup oder ähnlichen Tools zu parsen
Für Scraping-Zwecke sollten Sie old.reddit.com bevorzugen, sofern möglich. Die Daten sind identisch, aber die Extraktion ist deutlich einfacher.
Proxy-Auswahl für Reddit-Scraping
Die Wahl des richtigen Proxys hängt von Ihrem Volumen und Ihrem Risikoprofil ab. Nicht jeder Proxy-Typ ist für Reddit gleich gut geeignet:
| Kriterium | Datacenter-Proxys | Residential-Proxys | Mobile-Proxys |
|---|---|---|---|
| Erkennungsrisiko | Hoch | Niedrig | Sehr niedrig |
| Geschwindigkeit | Schnell (50–100ms) | Mittel (200–500ms) | Langsam (500ms+) |
| Preis pro GB | $0,50–2 | $5–15 | $20–50 |
| IP-Vielfalt | Begrenzt (Subnetze erkennbar) | Groß (echte ISP-IPs) | Sehr groß (Mobil-IPs) |
| Geeignet für | Niedriges Volumen, Tests | Mittleres-hohes Volumen | Maximale Zuverlässigkeit |
Datacenter-Proxys: Gut für den Einstieg
Für kleine Projekte — zum Beispiel das Monitoring von 5–10 Subreddits — reichen Datacenter-Proxys oft aus. Sie sind schnell und günstig. Das Problem: Reddit erkennt Datacenter-IP-Blöcke relativ zuverlässig. Wenn Sie auffallen, droht ein IP-Bann, der oft dauerhaft ist.
Residential-Proxys: Die beste Balance
Für ernsthaftes Reddit-Daten-Scraping sind Residential Proxys die beste Wahl. Sie nutzen echte ISP-IPs, die von Reddit nicht als Proxys erkannt werden. Mit IP-Rotation verteilen Sie Ihre Requests über tausende verschiedener IPs — jedes Request kommt scheinbar von einem anderen Nutzer. ProxyHat bietet Residential Proxys mit Geo-Targeting und flexiblen Session-Optionen, die sich ideal für die Reddit-Daten-Extraktion eignen.
Mobile-Proxys: Wenn alles andere scheitert
Mobile Proxys nutzen IPs von Mobilfunkanbietern. Reddit vertraut diesen IPs am meisten, da die meisten echten Nutzer mobil zugreifen. Der Preis ist allerdings hoch — nur für kritische Use Cases empfehlenswert, in denen Residential Proxys nicht ausreichen.
Praktische Umsetzung: Reddit mit Python scrapen
Hier ein vollständiges Beispiel, das old.reddit.com mit Residential Proxys und requests scrapped:
import requests
from bs4 import BeautifulSoup
import time
import random
# ProxyHat Residential Proxy Configuration
PROXY_URL = "http://user-country-US:PASSWORD@gate.proxyhat.com:8080"
HEADERS = {
"User-Agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/120.0.0.0 Safari/537.36"
),
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
}
def scrape_subreddit(subreddit, limit=25):
"""Scrape posts from a subreddit via old.reddit.com."""
url = f"https://old.reddit.com/r/{subreddit}/"
proxies = {"http": PROXY_URL, "https": PROXY_URL}
try:
response = requests.get(url, headers=HEADERS, proxies=proxies, timeout=15)
response.raise_for_status()
except requests.exceptions.HTTPError as e:
if e.response.status_code == 429:
print("Rate limited. Backing off...")
time.sleep(random.uniform(5, 15))
return scrape_subreddit(subreddit, limit)
raise
soup = BeautifulSoup(response.text, "html.parser")
posts = []
for thing in soup.select("#siteTable .thing"):
title_el = thing.select_one("a.title")
if not title_el:
continue
score_el = thing.select_one(".score.unvoted")
posts.append({
"title": title_el.get_text(strip=True),
"url": title_el.get("href"),
"score": score_el.get_text(strip=True) if score_el else "0",
"author": thing.get("data-author", "[deleted]"),
"id": thing.get("data-fullname", "").replace("t3_", ""),
})
if len(posts) >= limit:
break
return posts
# Beispielaufruf
results = scrape_subreddit("datascience", limit=10)
for post in results:
print(f"[{post['score']}] {post['title']}")
Dieses Beispiel nutzt old.reddit.com mit einem US-Residential-Proxy von ProxyHat. Der User-Agent ist ein realistischer Browser-String — ein kritischer Faktor, wie wir im nächsten Abschnitt sehen werden.
IP-Rotation und Sticky Sessions
Ein einzelner Proxy reicht nicht für großes Volumen. Sie müssen IPs rotieren. ProxyHat unterstützt zwei Modi:
Per-Request-Rotation
Jeder Request bekommt eine neue IP. Ideal für verteiltes Scraping, bei dem Sie nicht an einer Session festhalten müssen:
# Per-Request: Jeder Aufruf erhält eine neue IP
# Keine Session-Kennung im Username = automatische Rotation
PROXY_ROTATING = "http://user-country-US:PASSWORD@gate.proxyhat.com:8080"
proxies = {"http": PROXY_ROTATING, "https": PROXY_ROTATING}
subreddits = ["python", "datascience", "machinelearning"]
for subreddit in subreddits:
response = requests.get(
f"https://old.reddit.com/r/{subreddit}/",
headers=HEADERS,
proxies=proxies,
timeout=15,
)
print(f"{subreddit}: {response.status_code}")
time.sleep(random.uniform(2, 5))
Sticky Sessions
Manchmal müssen Sie mehrere Requests von derselben IP senden — zum Beispiel beim Paginieren durch Kommentar-Threads. Mit ProxyHat erstellen Sie eine Sticky Session durch eine Session-ID im Username:
import uuid
# Sticky Session: Alle Requests nutzen dieselbe IP
session_id = str(uuid.uuid4())[:8]
PROXY_STICKY = f"http://user-country-US-session-{session_id}:PASSWORD@gate.proxyhat.com:8080"
proxies = {"http": PROXY_STICKY, "https": PROXY_STICKY}
# Mehrere Requests mit derselben IP
post_ids = ["abc123", "def456", "ghi789"]
for pid in post_ids:
url = f"https://old.reddit.com/r/datascience/comments/{pid}/"
response = requests.get(url, headers=HEADERS, proxies=proxies, timeout=15)
print(f"Post {pid}: {response.status_code}")
time.sleep(random.uniform(1, 3))
Sticky Sessions laufen nach einer bestimmten Zeit ab — dann wird automatisch eine neue IP zugewiesen. Das verhindert, dass eine einzelne IP zu viele Requests sendet und auffällt.
Rate-Limits verstehen und umgehen
Reddit setzt Rate-Limits auf mehreren Ebenen ein. Wer sie ignoriert, riskiert Eskalation — und dauerhafte Bans.
Per-IP und Per-User-Agent Limits
Reddit trackt Requests pro IP-Adresse und pro User-Agent. Das bedeutet:
- Pro IP: ca. 60 Requests pro Minute für nicht authentifizierte Zugriffe
- Pro User-Agent: Auffällige oder generische User-Agents werden stärker limitiert oder sofort blockiert
- Kombination: Ein verdächtiger User-Agent von einer Datacenter-IP löst sofort Captchas oder Bans aus
Das 429-zu-403-Eskalationsmuster
Reddit eskaliert Restriktionen in einem vorhersehbaren Muster:
- 429 Too Many Requests — Erste Warnung. Back off sofort!
- 403 Forbidden — Nach wiederholten 429s sperrt Reddit die IP komplett
- CAPTCHA-Challenge — Bei verdächtigem Verhalten wird ein Captcha vorgeschaltet
Einmal auf der 403-Liste, ist die IP oft dauerhaft gesperrt. Deswegen ist IP-Rotation mit Residential Proxys so wichtig — Sie können einfach zur nächsten IP wechseln, wenn eine gebannt wird.
Robuste Rate-Limit-Behandlung in Python
import requests
import time
import random
from functools import wraps
def with_retry(max_retries=3, base_delay=2):
"""Decorator mit exponentiellem Backoff."""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
for attempt in range(max_retries):
try:
response = func(*args, **kwargs)
if response.status_code == 429:
retry_after = int(
response.headers.get(
"Retry-After",
base_delay * (2 ** attempt)
)
)
jitter = random.uniform(0.5, 1.5)
wait = retry_after * jitter
print(f"429 Rate Limited. Warte {wait:.1f}s "
f"(Versuch {attempt + 1}/{max_retries})")
time.sleep(wait)
continue
if response.status_code == 403:
print("403 Forbidden — IP gebannt. "
"Nächste Proxy-IP verwenden.")
break
response.raise_for_status()
return response
except requests.exceptions.RequestException as e:
if attempt == max_retries - 1:
raise
time.sleep(base_delay * (2 ** attempt) + random.uniform(0, 1))
return None
return wrapper
return decorator
@with_retry(max_retries=3)
def fetch_page(url, proxies, headers):
return requests.get(url, headers=headers, proxies=proxies, timeout=15)
# Nutzung
PROXY = "http://user-country-US:PASSWORD@gate.proxyhat.com:8080"
response = fetch_page(
"https://old.reddit.com/r/python/",
proxies={"http": PROXY, "https": PROXY},
headers=HEADERS,
)
Der Schlüssel: 429 heißt Backoff, 403 heißt IP wechseln. Ignorieren Sie niemals einen 429-Status.
Node.js-Beispiel: Reddit-Scraping mit Axios
Für Teams, die JavaScript bevorzugen, hier ein äquivalentes Beispiel mit Node.js:
const axios = require("axios");
const { HttpsProxyAgent } = require("https-proxy-agent");
const PROXY_URL = "http://user-country-US:PASSWORD@gate.proxyhat.com:8080";
const agent = new HttpsProxyAgent(PROXY_URL);
const HEADERS = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) " +
"AppleWebKit/537.36 (KHTML, like Gecko) " +
"Chrome/120.0.0.0 Safari/537.36",
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
};
async function scrapeSubreddit(subreddit) {
const url = `https://old.reddit.com/r/${subreddit}/`;
try {
const response = await axios.get(url, {
httpsAgent: agent,
httpAgent: agent,
headers: HEADERS,
timeout: 15000,
});
console.log(
`${subreddit}: ${response.status} — ${response.data.length} bytes`
);
return response.data;
} catch (error) {
if (error.response?.status === 429) {
console.log("Rate limited — backing off...");
await new Promise((r) =>
setTimeout(r, 5000 + Math.random() * 10000)
);
return scrapeSubreddit(subreddit);
}
throw error;
}
}
scrapeSubreddit("datascience");
Best Practices für Reddit-Scraping
Neben Proxys und Rate-Limits gibt es weitere Faktoren, die über Erfolg oder Misserfolg entscheiden:
- Realistischen User-Agent setzen: Kein
python-requests/2.xund kein leerer String. Verwenden Sie einen aktuellen Browser-String, der zu Ihrem Traffic-Profil passt. - Rate-Limits respektieren: Maximal 30–40 Requests pro Minute pro IP. Bauen Sie Delays von 2–5 Sekunden zwischen Requests ein.
- Aggressiv cachen: Speichern Sie gescrapte Daten lokal. Wenn Sie denselben Subreddit mehrfach abfragen, nutzen Sie ETags oder lokale Caches, um redundante Requests zu vermeiden.
- old.reddit.com bevorzugen: Schlankeres HTML, weniger JavaScript, konsistentere Struktur — wie oben erläutert.
- Geo-Targeting nutzen: Manche Subreddits zeigen regionale Inhalte. Mit
user-country-USim Proxy-Username stellen Sie konsistente Ergebnisse sicher. - Feeds statt HTML scrapen:
.jsonoder.rssURLs liefern strukturierte Daten mit weniger Parsing-Aufwand — sind aber stärker rate-limitiert. - Nicht anmelden: Authentifizierte Requests binden Ihr Reddit-Konto an das Scraping. Bei einem Bann verlieren Sie das Konto.
- Request-Vielfalt simulieren: Variieren Sie Delays, fügen Sie gelegentliche Requests zu anderen Seiten hinzu, und rotieren Sie User-Agents, um natürlicher zu wirken.
Ethisches Scraping: Wann Sie die offizielle API nutzen sollten
Scraping ist ein Werkzeug, kein Freifahrtschein. Bevor Sie scrapen, prüfen Sie:
- Gibt es eine offizielle API? Für kleine Projekte (unter 100 Requests/Minute) ist die kostenlose Reddit-API-OAuth ausreichend und zuverlässiger als Scraping.
- Respektieren Sie
robots.txt: Reddit erlaubt begrenztes Crawling, aber bestimmte Pfade sind gesperrt. Prüfen Siehttps://www.reddit.com/robots.txt. - Vermeiden Sie Login-Walls: Daten, die eine Anmeldung erfordern, sind nicht öffentlich. Scrapen Sie sie nicht.
- DSGVO und Datenschutz: Personenbezogene Daten (Usernames, Postings) unterliegen dem Datenschutz. Nutzen Sie nur, was für Ihren Zweck nötig ist, und anonymisieren Sie wo möglich.
- Rate-Limits als Leitfaden: Die Rate-Limits existieren, um Reddits Infrastruktur zu schützen. Ignorieren bedeutet Überlastung — für Reddit und für Ihre IPs.
Wenn Ihr Anwendungsfall innerhalb der kostenlosen API-Quotas liegt, nutzen Sie die API. Scraping ist für Situationen reserviert, in denen die API nicht ausreicht — etwa bei großem Volumen, spezifischen Datenpunkten oder wenn die API-Preise für Ihr Budget zu hoch sind. Mehr zu ethischem Scraping finden Sie in unserem Web-Scraping-Use-Case-Guide.
Key Takeaways
- Reddit-Scraping ist nach den API-Preisänderungen von 2023 relevanter denn je — aber es erfordert Sorgfalt und die richtige Infrastruktur.
- old.reddit.com ist die beste scraping-freundliche Oberfläche: schlankes HTML, keine SPA, konsistente Struktur.
- Residential Proxys sind für mittleres bis hohes Volumen unerlässlich. Datacenter-IPs werden schnell erkannt und gebannt.
- 429 heißt Backoff, 403 heißt IP wechseln — ignorieren Sie niemals Rate-Limit-Header.
- Realistische User-Agents und Delays sind die einfachsten und wichtigsten Anti-Ban-Maßnahmen.
- Cachen Sie aggressiv — redundante Requests verschwenden IP-Kontingente und erhöhen das Bann-Risiko.
- Nutzen Sie die offizielle API, wenn Ihr Volumen innerhalb der kostenlosen Quotas liegt.
Bereit, Reddit-Daten zu sammeln? ProxyHat bietet Residential Proxys mit Geo-Targeting und IP-Rotation, die sich ideal für Reddit-Scraping eignen. Starten Sie jetzt oder prüfen Sie unsere verfügbaren Standorte. Weitere Insights zum Tracking von Suchergebnissen finden Sie in unserem SERP-Tracking-Guide.






