Wie man Craigslist-Anzeigen scrapt: Fahrzeuge, Mietobjekte und Jobs
Craigslist ist eine Daten-Goldgrube, die von aggressiven IP-Rate-Limits geschützt wird. Hier ist die URL-Struktur pro Stadt, die 120-pro-Seite-Paginierung, die RSS-Abkürzung, die die meisten übersehen, und die Proxy-Einrichtung, die Sie von der Sperrliste fernhält.
Craigslist hält eine enorme Menge an nutzbaren öffentlichen Daten — Gebrauchtwagen, Wohnungsvermietungen, Jobs, Verkaufsartikel, Dienstleistungen — verteilt auf Hunderte von Stadtseiten. Es ist auch eine Anfängerhürde mit CAPTCHAs und IP-Sperren, da Craigslist hart nach IP-Adresse rate-limitiert. Die gute Nachricht: Die URL-Struktur der Seite ist einfach und vorhersehbar, es gibt eine RSS-Abkürzung, die die meisten Anleitungen überspringen, und das Blockierungsproblem ist fast vollständig ein IP-Hygieneproblem. Diese Anleitung behandelt das URL-Muster pro Stadt, die Paginierungsmathematik, das Parsen, die RSS-Route und die Proxy-Einrichtung, die einen Scraper von der Sperrliste fernhält. Scrapen Sie für persönliche oder Forschungszwecke, respektieren Sie die Nutzungsbedingungen von Craigslist und betrachten Sie dies als allgemeine Information und nicht als rechtlichen Rat.
Das URL-Muster ist das ganze Spiel
Craigslist teilt sich in Stadtsubdomain und Kategoriecode auf, und alles andere sind Abfrageparameter. Lernen Sie die Form einmal und Sie können jede Stadt und Sektion anvisieren: https://{city}.craigslist.org/search/{category}?query={q}. Kategoriecodes sind kurz — sss für alles zum Verkauf, cto für Autos von Privat, apa für Wohnungen, ggg für Jobs. Fügen Sie min_price, max_price und andere Filter als Parameter hinzu. Die Paginierung verwendet den s-Parameter, und jede Seite zeigt 120 Ergebnisse — also ist Seite zwei s=120, Seite drei s=240 und so weiter.
import requests
from bs4 import BeautifulSoup
PROXY = "http://USER:PASS@rotating.quantumproxies.io:8000"
PROXIES = {"http": PROXY, "https": PROXY}
UA = ("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36")
def build_url(city, category, query, page=0, min_price=None, max_price=None):
base = f"https://{city}.craigslist.org/search/{category}"
params = [f"query={query}"]
if min_price: params.append(f"min_price={min_price}")
if max_price: params.append(f"max_price={max_price}")
if page: params.append(f"s={page * 120}") # 120 results per page
return base + "?" + "&".join(params)
url = build_url("minneapolis", "cto", "bmw", page=0, max_price=8000)
r = requests.get(url, headers={"User-Agent": UA}, proxies=PROXIES, timeout=20)
Die Anzeigen parsen
Suchergebniszeilen sind mit einem stabilen Satz von Klassen markiert — der Anzeigenblock ist .result-info, mit .result-title, .result-price und .result-date darin. Sichern Sie jedes Feld ab, da nicht jede Anzeige einen Preis hat:
def parse_listings(html):
soup = BeautifulSoup(html, "html.parser")
out = []
for row in soup.select(".result-info"):
title_el = row.select_one(".result-title")
price_el = row.select_one(".result-price")
date_el = row.select_one(".result-date")
if not title_el:
continue
out.append({
"title": title_el.get_text(strip=True),
"url": title_el.get("href"),
"price": price_el.get_text(strip=True) if price_el else None,
"date": date_el.get("datetime") if date_el else None,
})
return out
listings = parse_listings(r.text)
print(len(listings), "listings on this page")
Für reichhaltigere Datensätze — Kilometerstand eines Autos, Schlafzimmer einer Mietwohnung — folgen Sie jeder Anzeigen-URL und parsen Sie die Detailseite. Das verdoppelt Ihre Anfragenanzahl, daher ist genau hier das Timing und die Rotation wichtig.

Die RSS-Abkürzung, die die meisten Anleitungen überspringen
Craigslist hat keine allgemeine öffentliche API, aber es stellt einen RSS-Feed für Suchergebnisse bereit — fügen Sie &format=rss zu jeder Such-URL hinzu und Sie erhalten einen strukturierten XML-Feed anstelle von HTML zum Parsen. Er ist leichter, weniger wahrscheinlich, Anti-Bot-Heuristiken auszulösen, als die vollständige Ergebnisseite wiederholt zu laden, und ideal zum Überwachen: Überwachen Sie eine gespeicherte Suche nach einem Zeitplan und vergleichen Sie neue Einträge. Er liefert weniger Felder als die HTML-Seite (Titel, Link, Zeitstempel), daher verwenden Sie ihn zur Frischeüberwachung und greifen Sie auf HTML zurück, wenn Sie Preis und Details benötigen.
import feedparser
# Any Craigslist search becomes a feed with &format=rss
feed_url = build_url("sfbay", "apa", "loft", max_price=3500) + "&format=rss"
raw = requests.get(feed_url, headers={"User-Agent": UA}, proxies=PROXIES, timeout=20)
feed = feedparser.parse(raw.content)
for entry in feed.entries[:5]:
print(entry.updated, entry.title, entry.link)
Warum Craigslist Sie sperrt und wie Sie nicht gesperrt werden
Craigslist stapelt mehrere Abwehrmaßnahmen, aber sie haben eine gemeinsame Wurzel: Es verfolgt Anfragen pro IP-Adresse und blockiert Adressen, die es zu stark belasten. Die spezifischen Maßnahmen sind IP-Rate-Limitierung, CAPTCHA-Herausforderungen bei verdächtigem Traffic, User-Agent-Überwachung, Sitzungsverfolgung und temporäre IP-Sperren. Jede von ihnen wird besiegt, indem man wie viele gewöhnliche Besucher aussieht, anstatt wie eine unermüdliche Maschine.
- IPs rotieren und Last verteilen — eine einzelne IP, die durch eine Stadt blättert, ist der schnellste Weg zu einer Sperre. Eine Rotation pro Anfrage über einen Wohnpool bedeutet, dass kein Exit abnormal aussieht.
- Anfragen timen — 1-2 Anfragen pro Sekunde sind ein sicheres Limit für kleine Läufe; fügen Sie Jitter hinzu und ziehen Sie sich zurück, sobald Sie ein CAPTCHA oder 403 sehen.
- User-Agent rotieren — ein konstanter oder Standard-UA ist ein Hinweis; variieren Sie ihn und halten Sie ihn aktuell.
- Eine Sitzung pro Stadt — starten Sie frische Cookies pro Stadt oder pro Lauf, anstatt eine Identität über alles hinweg zu tragen.
Da Sperren IP-basiert sind, leistet die Exit-IP die meiste Arbeit. Ein sauberer Wohnproxy-Pool sieht aus wie echte Heimverbindungen, und die Rotation pro Anfrage verteilt einen Multi-City-Crawl so dünn, dass die Per-IP-Zähler von Craigslist nie auslösen. Wenn Sie über viele Städte hinweg sammeln, behandelt unser Leitfaden zu 429-Rate-Limits beheben die Timing- und Budgetseite der Gleichzeitigkeit, und die Anti-Sperr-Checkliste fasst alles zusammen.
Craigslist mit sauberen Wohn-IPs scrapen
Skalierung über Städte hinweg
Die wahre Stärke der Craigslist-Daten liegt im Vergleich zwischen Städten — dasselbe Gebrauchtfahrzeug oder Mietobjekt, das über ein Dutzend Metropolen hinweg bepreist wird. Schleifen Sie Ihre Stadtliste, binden Sie einen frischen rotierenden Exit pro Stadt, begrenzen Sie die Gleichzeitigkeit und speichern Sie die Stadt zusammen mit jedem Datensatz. Für Fahrzeug- und Mietforschung speziell speisen dieselben Muster eine Vergleichspipeline; siehe unsere Anleitungen zu Fahrzeuganzeigen scrapen und Immobiliendaten, um rohe Anzeigen in Marktsignale zu verwandeln.

Häufig gestellte Fragen
Kann man Craigslist scrapen?
Ja — die öffentlichen Such- und Anzeigenseiten sind scrape-fähig, und Craigslist stellt sogar einen RSS-Feed für Suchen bereit. Das Hindernis ist die aggressive per-IP-Rate-Limitierung, nicht das Parsen. Rotieren Sie Wohn-IPs, timen Sie Anfragen auf 1-2 pro Sekunde, und Sie können zuverlässig Fahrzeuge, Mietobjekte, Jobs und Verkaufsdaten sammeln. Respektieren Sie die Nutzungsbedingungen von Craigslist und scrapen Sie nur öffentliche Daten.
Hat Craigslist eine API?
Es gibt keine allgemeine öffentliche Daten-API, aber jede Such-URL kann einen RSS-Feed zurückgeben, indem man &format=rss anhängt. Das gibt Ihnen einen strukturierten XML-Feed mit Titeln, Links und Zeitstempeln — perfekt zum Überwachen neuer Einträge — während die HTML-Seiten die vollständigeren Felder wie Preis und Beschreibung enthalten.
Wie vermeide ich, dass meine IP beim Scrapen von Craigslist gesperrt wird?
Craigslist sperrt nach IP-Rate, daher drehen sich die Lösungen alle um das Verteilen und Verlangsamen der Last: Rotieren Sie Wohn-IPs pro Anfrage, bleiben Sie bei 1-2 Anfragen pro Sekunde mit Jitter, rotieren Sie Ihren User-Agent, verwenden Sie eine frische Sitzung pro Stadt und ziehen Sie sich sofort zurück, wenn Sie ein CAPTCHA oder 403 sehen. Eine Rechenzentrums-IP, die eine Stadt bearbeitet, wird am schnellsten gesperrt.
Wie funktioniert die Paginierung bei Craigslist?
Craigslist zeigt 120 Ergebnisse pro Seite und paginiert mit dem s-Abfrageparameter als Offset. Seite eins lässt s weg, Seite zwei ist s=120, Seite drei s=240 und so weiter. Erhöhen Sie in Schritten von 120, bis eine Seite weniger als 120 Ergebnisse zurückgibt, was das Ende markiert.
Craigslist ist leicht zu lesen und leicht, gesperrt zu werden — und das zweite Problem ist vollständig ein IP-Hygieneproblem. Beherrschen Sie das URL-Muster, verwenden Sie RSS zur Überwachung, paginieren Sie in Schritten von 120 und leiten Sie alles durch rotierende Wohn-IPs in menschlichem Tempo. Tun Sie das, und die CAPTCHAs hören einfach auf zu erscheinen.