Craigslist pořád láká zhruba 108 milionů návštěv měsíčně napříč asi 700 lokálními weby — a pořád nenabízí veřejné API. Pokud chceš získat strukturovaná data z inzerátů na byty, ojetá auta, pracovní nabídky nebo brigády, scrapovat je je v praxi jediná cesta.
Craigslist má ale vlastní anti-bot systém a ten je nekompromisní. Nepoužívá Cloudflare ani DataDome — běží na vlastním rate limiteru postaveném na nginxu, který ladí už víc než deset let. Když ho trefíš špatně, dostaneš čistou 403 ještě před druhou kávou. Strávil jsem spoustu času testováním různých přístupů proti ochranám Craigslistu a z toho vznikl tenhle průvodce: aktuální Python tutoriál pro rok 2025, použitelný napříč kategoriemi, který pokrývá metodu extrakce JSON-LD (největší zlepšení oproti zastaralým návodům), poctivé strategie proti blokování, právní souvislosti i no-code alternativu pro každého, kdo chce data, ale nechce napsat ani řádek kódu.
Co znamená scrapovat Craigslist pomocí Pythonu?
Web scraping Craigslistu znamená, že pomocí Python skriptů automatizovaně navštěvuješ stránky Craigslistu, vytahuješ z nich strukturovaná data, která potřebuješ — názvy, ceny, popisy, obrázky, lokality, datum zveřejnění — a ukládáš je do tabulky, databáze nebo JSON souboru.
Python je pro tohle nejčastější volba díky svému ekosystému knihoven. S requests, BeautifulSoup, lxml a curl_cffi zvládneš postavit funkční Craigslist scraper za méně než 100 řádků. Komunita je obrovská, takže když Craigslist něco změní (a že to dělá), už většinou někdo přijde s opravou.
Důležitá věc: Craigslist neposkytuje veřejné read API. Jediné oficiální programové rozhraní je Bulk Posting Interface (BAPI), který je jen pro zápis — umožňuje schváleným placeným inzerentům přidávat nabídky, ne je stahovat. Každý produkt typu „Craigslist API“, který vidíš na třetích stranách, je ve skutečnosti neoficiální scraper, ne oficiálně schválený endpoint. Pokud chceš data ve větším objemu, scrapuješ.
Proč scrapovat Craigslist? Reálné scénáře použití
Craigslist není jen místo pro starý gauč. Je to obrovský, neustále aktualizovaný dataset napříč desítkami kategorií. Tady je, kdo z jeho scrapování skutečně těží:
| Příklad použití | Kdo z toho těží | Co se získává |
|---|---|---|
| Sledování cen bytů a pronájmů | Realitní makléři, nájemníci, PropTech firmy | Cena, plocha, počet ložnic, čtvrť, zeměpisná poloha |
| Analýza trhu s ojetými auty | Dealershipy, spotřebitelské aplikace, výzkumníci | Cena, značka, model, rok, tachometr, stav |
| Výzkum pracovního trhu | Náboráři, pracovní ekonomové, analytici pracovní síly | Název pozice, odměna, typ úvazku, datum zveřejnění |
| Generování leadů | Obchodní týmy, poskytovatelé služeb | Kontaktní údaje, názvy firem, oblast působnosti |
| Cenová konkurenceschopnost | Lokální poskytovatelé služeb, e-commerce provoz | Ceny služeb, popisy, oblasti pokrytí |
Nejčastěji citovaný akademický příklad je Kaggle dataset „Used Cars Dataset“ — přibližně 500 000 inzerátů na ojetá auta v USA se 26 proměnnými, které posloužily jako základ pro desítky studií, včetně výzkumu z ResearchGate z roku 2024 zaměřeného na dynamiku trhu s ojetými vozy v USA. Hedge fondy nakupovaly agregovaná data z Craigslistu o nájmech pro výzkum trendů nájemného. A obchodní týmy běžně scrapují sekce services a gigs pro generování leadů.
Matematika je jednoduchá: 8 hodin ručního kopírování a vkládání versus asi 10 minut s dobře postaveným scraperem.

Scraping Craigslistu v Pythonu: každá kategorie, ne jen auta
Téměř každý návod na scraping Craigslistu, na který jsem narazil, se věnuje jen autům na prodej — což je podobné, jako napsat návod na Google, který umí jen vyhledávání obrázků. Craigslist má desítky kategorií a URL struktura se u každé liší.
Základní tvar je vždycky: https://{city}.craigslist.org/search/{category_slug}
Stačí vyměnit subdoménu města a slug a scrapuješ úplně jiný segment. Tady je přehled nejpoužívanějších kategorií (ověřeno v dubnu 2025):
| Kategorie | URL slug | Typická pole k extrakci |
|---|---|---|
| Byty / bydlení | /search/apa | Cena, plocha, ložnice, lokalita, pravidla pro mazlíčky |
| Auta a dodávky | /search/cta | Cena, značka, model, rok, tachometr |
| Práce | /search/jjj | Název pozice, firma, mzda, typ úvazku |
| Služby | /search/bbb | Název, popis, telefonní číslo, oblast |
| Brigády | /search/ggg | Název, odměna, datum, kategorie |
| Na prodej (obecně) | /search/sss | Název, cena, stav, lokalita |
Můžeš také kombinovat parametry pro filtrování:
| Parametr | Účel | Příklad |
|---|---|---|
query | Klíčové slovo v plném textu | ?query=studio |
min_price / max_price | Cenové rozpětí | &min_price=1500&max_price=3000 |
hasPic | Pouze inzeráty s obrázky | &hasPic=1 |
postedToday | Posledních 24 hodin | &postedToday=1 |
sort | Řazení | &sort=priceasc |
s | Offset stránkování (120 na stránku) | ?s=120 |
URL jako https://newyork.craigslist.org/search/apa?min_price=1500&max_price=3000&hasPic=1 ti tedy vrátí byty v New Yorku v ceně mezi 1 500 a 3 000 USD s fotografiemi. Každý Python scraper v tomhle návodu funguje napříč všemi těmito kategoriemi — stačí změnit slug.
HTML selektory Craigslistu v roce 2025: staré vs. nové (a zkratka přes JSON)
Nejčastější důvod, proč Craigslist scrapery přestávají fungovat, jsou změny HTML struktury. Pokud sleduješ návod z roku 2022, který tě posílá na .result-row nebo .result-info, tvůj scraper je už dávno mrtvý.
Craigslist v letech 2023–2024 přepsal markup výsledků vyhledávání. Staré class names jsou sice pořád někde zabalené v nových obalech, ale když je cílíš na vrcholu DOM stromu, dostaneš prázdný seznam. Tady je, co se změnilo:
| Prvek | Původní selektor (před 2024) | Současný selektor (2025) |
|---|---|---|
| Kontejner inzerátu | .result-info | .cl-search-result |
| Odkaz na nadpis | .result-title | .posting-title a |
| Cena | .result-price | .priceinfo |
| Metadata (oblast) | .result-hood | .meta |
Ale tady je skutečný klíčový poznatek — a ten odlišuje aktuální 2025 scraper od všech ostatních: u výsledků vyhledávání nemusíš parsovat HTML vůbec.
Craigslist teď vkládá každý viditelný inzerát do tagu <script id="ld_searchpage_results"> jako strukturovaná JSON-LD data. Jediný requests.get() vrátí kompletní schema.org ItemList se všemi inzeráty na stránce — název, cenu, měnu, lokaci, URL obrázku, odkaz na detail. Není potřeba renderování JavaScriptem. Žádná křehkost CSS selektorů.
Přístup přes JSON-LD je rychlejší, stabilnější a mnohem méně náchylný k rozbití, když Craigslist upraví UI. Používají ho prakticky všechny aktivně udržované GitHub repozitáře a budeme ho používat i v tutoriálu níže.
Jedna poznámka: JSON-LD blok je k dispozici u kategorií s cenou — byty (apa), inzeráty na prodej (sss), auta (cta), bydlení (hhh). U kategorií jako práce (jjj), brigády (ggg), komunita (ccc) a služby (bbb) často chybí nebo je prázdný, protože tyto inzeráty nemají schema.org/Offer cenu. U nich přejdi zpět na HTML cestu s .cl-search-result.
Jakou Python stack zvolit: Requests + BS4 vs. Selenium vs. Playwright
Tohle je otázka, která padá v každém scraping fóru: „Jakou knihovnu mám použít?“ U Craigslistu je odpověď mnohem přímočařejší než u většiny webů.
| Faktor | requests + BeautifulSoup | Selenium | Playwright |
|---|---|---|---|
| Rychlost | 5–15 stránek/s (omezeno sítí) | 0,3–1 stránky/s | 0,5–2 stránky/s |
| Obsah renderovaný přes JS | Ne | Ano | Ano |
| Paměť | ~30–60 MB | ~400–700 MB | ~300–500 MB |
| Složitost nastavení | Nízká | Střední | Střední |
| Odolnost vůči botům | Nízká (potřebuje hlavičky/proxy) | Střední (reálný prohlížeč) | Střední až vyšší |
| Nejlepší použití pro Craigslist | Výsledky vyhledávání (JSON-LD) | Detailní stránky s dynamickým obsahem | Velké async scrape operace |
| Náročnost na učení | Vhodné pro začátečníky | Střední | Střední |
Stránky Craigslistu jsou renderované serverem. JSON-LD blok je v počátečním HTML. Na čtení tady není žádná JavaScriptová bariéra. Každý aktivně udržovaný Craigslist scraper na GitHubu používá requests + BeautifulSoup nebo Scrapy. Žádné Selenium ani Playwright. Není to náhoda — framework pro automatizaci prohlížeče přidává stovky MB paměti, 10–100násobné zpomalení a viditelnější fingerprint, aniž by přinesl výhodu.
Mé doporučení:
- requests + BS4: Začni tady. Skvěle se hodí k metodě extrakce JSON-LD a pokryje 95 % potřeb scrapingu Craigslistu.
- Selenium: Jen pokud potřebuješ interakci s dynamickým obsahem na konkrétních detailních stránkách (na Craigslistu spíš výjimečné).
- Playwright: Pokud škáluješ na tisíce stránek s async paralelismem — ale upřímně, úzké hrdlo je rate limiter Craigslistu, ne propustnost tvé knihovny.
Srovnání Playwright vs. Puppeteer i přehled nejlepších Python nástrojů pro web scraping máme rozepsané v samostatných článcích, pokud chceš kompletní rozbor.
Scrape Craigslist bez psaní Pythonu Get Started Free
No-code alternativa: scrapujte Craigslist bez psaní Pythonu
Krátká odbočka před kódem — tahle část je pro všechny, kdo nejsou vývojáři. Realitní makléři, obchodní týmy, operations manažeři — pokud chceš jen data a nezajímá tě psaní Pythonu, existuje rychlejší cesta.
Thunderbit je AI web scraper jako rozšíření do Chromu. Craigslist umí scrapovat asi na 2 kliknutí a bez kódu. Postup je následující:
- Otevři libovolnou stránku s výsledky na Craigslistu (byty, auta, práce — jakoukoli kategorii).
- Klikni v postranním panelu Thunderbit na „AI Suggest Fields“. AI si stránku přečte a automaticky rozpozná sloupce jako název inzerátu, cena, lokalita a odkaz.
- Klikni na „Scrape“ — data se vytáhnou během několika sekund.
- Použij Subpage Scraping pro návštěvu detailní stránky každého inzerátu a obohať data o plné popisy, telefonní čísla, obrázky a atributy.
- Exportuj přímo do Google Sheets, Excelu, Airtable nebo Notion — zcela zdarma.
Pro opakované potřeby — třeba denní monitoring cen bytů nebo týdenní snímky pracovních nabídek — má Thunderbit funkci Scheduled Scraper, kde plán popíšeš jednoduše lidskou řečí a vše běží automaticky. Žádné cron joby, žádná správa serveru.
Thunderbit navíc zvládá anti-bot opatření přes Cloud Scraping režim, takže nemusíš řešit rotaci proxy ani ručně ladit hlavičky. Pokud si ho chceš vyzkoušet, stáhni si Thunderbit Chrome Extension a přesvědč se sám.
Pokud chceš plnou kontrolu a vlastní úpravy, pokračuj dál krok za krokem v Pythonu.
Krok za krokem: Jak scrapovat Craigslist pomocí Pythonu (kompletní návod)
- Obtížnost: Střední
- Časová náročnost: ~30 minut (instalace + první scrape)
- Co budeš potřebovat: Python 3.8+, prohlížeč Chrome (kvůli inspekci stránek), terminál
Krok 1: Nastav si Python prostředí
Nainstaluj potřebné knihovny:
pip install requests beautifulsoup4 lxml
lxml je volitelný, ale výrazně zrychluje parsování v BeautifulSoup. Pokud později narazíš na problémy s TLS fingerprintem (více v části proti blokování), můžeš nainstalovat i curl_cffi:
pip install curl_cffi
Importy budou vypadat takto:
import requests
from bs4 import BeautifulSoup
import json
import csv
import time
import random
Teď už bys měl mít čisté Python prostředí se všemi závislostmi nainstalovanými.
Krok 2: Sestav URL pro libovolnou kategorii Craigslistu
Cílovou URL vytvoříme dynamicky z města + slug kategorie + volitelné filtry:
from urllib.parse import urlencode
BASE = "https://{city}.craigslist.org/search/{slug}"
def build_url(city, slug, **params):
return f"{BASE.format(city=city, slug=slug)}?{urlencode(params)}"
# Příklad: byty v New Yorku, 1500–3000 USD, s fotkami
url = build_url("newyork", "apa", min_price=1500, max_price=3000, hasPic=1)
print(url)
# https://newyork.craigslist.org/search/apa?min_price=1500&max_price=3000&hasPic=1
Vyměň "apa" za "cta" (auta), "jjj" (práce), "bbb" (služby) nebo jakýkoli slug z tabulky výše. A "newyork" vyměň za "sfbay", "chicago", "losangeles" atd.
Krok 3: Stáhni stránku a vytáhni vložený JSON
Pošli GET požadavek s vhodnými hlavičkami a potom parsuj JSON-LD blok:
HEADERS = {
"User-Agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/124.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.9",
"Accept-Encoding": "gzip, deflate, br",
"Referer": "https://www.craigslist.org/",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "same-origin",
"Upgrade-Insecure-Requests": "1",
}
session = requests.Session()
r = session.get(url, headers=HEADERS, timeout=20)
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
tag = soup.select_one("script#ld_searchpage_results")
data = json.loads(tag.text) if tag else {"itemListElement": []}
Pokud je tag None, JSON-LD blok pro danou kategorii není k dispozici — pak přejdi na parsování HTML (viz tabulka selektorů výše). U bytů, aut a kategorií „na prodej“ je JSON-LD blok spolehlivě přítomný.
Krok 4: Převeď data inzerátů do strukturovaných záznamů
Projdi JSON položky a vytáhni potřebná pole:
listings = []
for entry in data["itemListElement"]:
item = entry["item"]
offers = item.get("offers", {}) or {}
addr = (offers.get("availableAtOrFrom") or {}).get("address", {})
listings.append({
"name": item.get("name"),
"url": offers.get("url"),
"price": offers.get("price"),
"currency": offers.get("priceCurrency"),
"locality": addr.get("addressLocality"),
"region": addr.get("addressRegion"),
"image": item.get("image"),
})
print(f"Nalezeno {len(listings)} inzerátů")
Měl bys vidět něco jako „Nalezeno 120 inzerátů“ (Craigslist zobrazuje 120 výsledků na stránku). U některých inzerátů může být None u ceny, pokud ji zadavatel neuvedl — s tím je potřeba počítat v dalším zpracování.
Krok 5: Pro detailnější data scrapuj detailní stránky
Výsledky vyhledávání poskytují jen souhrnné informace. Pro plné popisy, atributy (ložnice, plocha, pravidla pro mazlíčky), souřadnice lat/long a obrázky je potřeba otevřít detailní stránku každého inzerátu.
def fetch_detail(url, session):
r = session.get(url, headers=HEADERS, timeout=20)
r.raise_for_status()
s = BeautifulSoup(r.text, "html.parser")
body = s.select_one("#postingbody")
mp = s.select_one("#map")
return {
"description": body.get_text("\n", strip=True) if body else None,
"attributes": [x.get_text(" ", strip=True)
for x in s.select("p.attrgroup span, div.attrgroup .attr")],
"lat": mp.get("data-latitude") if mp else None,
"lng": mp.get("data-longitude") if mp else None,
"images": [img["src"] for img in s.select("div.gallery img")],
}
for item in listings:
item.update(fetch_detail(item["url"], session))
time.sleep(random.uniform(3, 6)) # zásadní: jitter proti blokování
time.sleep(random.uniform(3, 6)) není volitelný. Vynecháš ho a během několika desítek požadavků narazíš na 403. Detailní stránky jsou server-renderované se stabilními selektory (#titletextonly, #postingbody, #map), které se v zásadě nezměnily od roku 2017 — což je na Craigslistu jedna z mála opravdu spolehlivých věcí.
Krok 6: Ošetři stránkování, abys získal všechny výsledky
Craigslist používá pro stránkování offset parametr ?s=120. Každá stránka ukazuje 120 výsledků a maximální offset bývá typicky 2999.
def iter_all(city, slug, max_pages=25, **filters):
for page in range(max_pages):
offset = page * 120
url = build_url(city, slug, s=offset, **filters)
r = session.get(url, headers=HEADERS, timeout=20)
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
tag = soup.select_one("script#ld_searchpage_results")
if not tag:
break
data = json.loads(tag.text)
items = data.get("itemListElement", [])
if not items:
break
for entry in items:
item = entry["item"]
offers = item.get("offers", {}) or {}
yield {
"name": item.get("name"),
"url": offers.get("url"),
"price": offers.get("price"),
}
time.sleep(random.uniform(2.5, 5.0))
Nesnaž se scrapovat tisíce stránek v rychlém sledu. Craigslist omezuje provoz podle IP a udržitelná propustnost pro jednu IP se pohybuje zhruba jen kolem 0,3–0,5 požadavku za sekundu bez ohledu na knihovnu. To omezení nastavuje Craigslist, ne Python.
Krok 7: Exportuj data z Craigslistu do CSV, JSON nebo Google Sheets
Ulož výsledky:
# CSV
with open("craigslist.csv", "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=listings[0].keys())
w.writeheader()
w.writerows(listings)
# JSON
with open("craigslist.json", "w", encoding="utf-8") as f:
json.dump(listings, f, indent=2, ensure_ascii=False)
Pokud se ti do exportního kódu vůbec nechce, Thunderbit nabízí bezplatný export přímo do Google Sheets, Excelu, Airtable nebo Notionu z prohlížeče. Pro Python pipeline jsou ale CSV a JSON standardní výstupy. Data můžeš také poslat rovnou do pandas na analýzu nebo do databáze přes sqlite3.
Jak se vyhnout zablokování při scrapování Craigslistu v Pythonu
Většina návodů tuhle část jen přejde. Anti-bot systém Craigslistu je vlastní řešení, ne hotový produkt, a má několik specifických zvláštností.

Používej realistické request hlavičky
Craigslist kontroluje pořadí i úplnost hlaviček. Požadavek bez Sec-Fetch-Dest nebo se zastaralým User-Agentem bude označen ještě před tím, než se vůbec dostane k obsahu. Kompletní sada hlaviček pro Chrome 120+ (uvedená ve Kroku 3 výše) je minimum. User-Agent můžeš rotovat mezi 5–10 aktuálními desktopovými stringy Chrome/Firefox — ale neměň ho během jedné relace, protože to působí nepřirozeně.
Chybějící Sec-Fetch-* hlavičky jsou zdaleka nejčastější důvod, proč nováčci dostanou okamžitý ban.
Přidávej náhodné prodlevy mezi požadavky
Konsensus z několika zdrojů (ScrapingBee, Scraperly, Oxylabs, Multilogin) se shoduje na náhodných 2–5 sekundách mezi načtením výsledků a 3–6 sekundách mezi detailními stránkami. Konstantní intervaly vypadají jako bot. Používej time.sleep(random.uniform(2, 5)) — nikdy ne time.sleep(2).
Rotuj proxy, pokud scrapuješ ve větším měřítku
Craigslist předem blokuje celé rozsahy IP od AWS, GCP a Azure. Datacentrové proxy často skončí blokované hned při prvním požadavku. Pro cokoli nad pár stovek stránek potřebuješ rezidenční rotující proxy, ideálně rotované každých 20–30 požadavků. Mobilní proxy mají nejnižší riziko detekce, ale stojí 8–30 USD za GB.
| Typ proxy | Riziko detekce na Craigslistu | Cena (2025) |
|---|---|---|
| Datacentrová | Velmi vysoké — často blokována hned na první požadavek | 0,50–2 USD/GB |
| Rezidenční rotující | Nízké — doporučeno | 5–15 USD/GB |
| Mobilní | Nejnižší | 8–30 USD/GB |
Thunderbit v režimu Cloud Scraping řeší rotaci proxy automaticky, pokud se o to nechceš starat sám.
S CAPTCHA zacházej rozumně
CAPTCHy na Craigslistu jsou na čtecích stránkách vzácné — objevují se hlavně u publikování a odpovědí na inzeráty. Pokud se objeví: zastav se alespoň na 60 sekund, změň IP, vymaž cookies a zpomal. Přetrvávající CAPTCHA je znamení, že jedeš příliš agresivně, ne hádanka, kterou je potřeba „rozbít“ solverem.
Respektuj limity a implementuj backoff
Craigslist vrací 403 (ne 429), když narazíš na rate limit. 403 znamená, že aktuální IP je na deny listu — nerecykluj slepě stejný požadavek. Změň IP, změň UA a počkej.
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
retry = Retry(
total=5,
backoff_factor=1.5, # 1.5, 3, 6, 12, 24 s
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods={"GET"},
respect_retry_after_header=True,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount("https://", adapter)
Ještě jedna rada: zkušenosti z komunity opakovaně uvádějí jako nejbezpečnější čas pro scraping 2:00–6:00 ráno podle lokálního času cílového města, s přibližně o 30–40 % nižší mírou blokování než přes den.
TLS fingerprinting — skrytá past
Bot vrstva Craigslistu kontroluje TLS ClientHello. Python requests knihovna (postavená na OpenSSL) má JA3 fingerprint, který neodpovídá žádnému skutečnému prohlížeči. Perfektní User-Agent v kombinaci s netypickým TLS fingerprintem je detekovatelný nesoulad. Řešením je curl_cffi s impersonate="chrome124", které napodobí TLS handshake Chromu:
from curl_cffi import requests as cffi_requests
r = cffi_requests.get(url, headers=HEADERS, impersonate="chrome124")
Pokud dostáváš nevysvětlitelné 403 i s čistými rezidenčními IP a správnými hlavičkami, je velmi pravděpodobně na vině právě TLS fingerprinting.
Craigslist robots.txt, podmínky použití a etický scraping
Většina návodů tohle buď úplně vynechá, nebo to schová do jedné věty v FAQ. Vzhledem k tomu, že Craigslist v souvislosti se scrapingem vyhrál proti scraperovi (RadPad, 2017) rozsudek ve výši 60,5 milionu dolarů, zaslouží si to víc než jen poznámku pod čarou.
Co vlastně říká robots.txt Craigslistu
Soubor robots.txt je překvapivě krátký. Obsahuje jediný blok User-agent: * a jen sedm zakázaných cest:
Disallow: /reply
Disallow: /fb/
Disallow: /suggest
Disallow: /flag
Disallow: /mf
Disallow: /mailflag
Disallow: /eaf
Všech těchto sedm jsou interaktivní nebo měnící endpointy: odpověď na inzerát, nahlášení, doporučení, email-a-friend. Stránky s inzeráty (/search/..., jednotlivé URL příspěvků) zakázané nejsou. Není tam ani direktiva Crawl-delay, i když Craigslist si svůj vlastní delay stejně vynucuje přes blokace IP.
Městské subdomény publikují i sitemapu — například https://newyork.craigslist.org/sitemap/index.xml — což je oficiálně dohledatelná cesta k inzerátům.
Právní precedent: případy, které jsou důležité
Craigslist v. 3Taps (2013, urovnáno 2015): 3Taps scrapoval inzeráty z Craigslistu a dál je prodával. Když Craigslist poslal cease-and-desist a zablokoval jejich IP, 3Taps blokaci obcházel rotujícími proxy. Soud rozhodl, že obcházení IP blokací po explicitním zrušení oprávnění spadá pod „without authorization“ podle CFAA. 3Taps se urovnal za 1 milion dolarů.
Meta v. Bright Data (2024): Novější rozhodnutí ukázalo, že podmínky služby Meta nemohou zakazovat scraping veřejně dostupných dat uživatelům, kteří nejsou přihlášeni. Soud řekl, že scraper bez přihlášení je „ve stejné pozici jako návštěvník“. To je pro scrapery v letech 2024–2025 jeden z nejdůležitějších rozsudků — pokud si na Craigslistu nikdy nevytvoříš účet, nikdy se nepřihlásíš a přistupuješ jen k veřejně viditelným stránkám, podmínky služby proti tobě možná nebudou vymahatelné jako smlouva.
Praktický závěr: Riziko podle CFAA se po Van Buren (2021) a hiQ v. LinkedIn (2022) u veřejně dostupných stránek výrazně snížilo. Ale delikty podle státního práva (trespass-to-chattels, misappropriation) zůstávají reálné — právě ty stály za urovnáním 3Taps i za rozsudkem 60,5 milionu dolarů proti RadPadu.
Tohle je informativní text, ne právní rada. Pokud chceš Craigslist scrapovat komerčně, prober to s právníkem.
Praktický etický checklist pro scraping
- ✅ Dodržuj každý
Disallowv robots.txt — zejména všech sedm akčních endpointů - ✅ Drž se výrazně pod 1 000 stránek za 24 hodin na jednu IP (podle podmínek Craigslistu je nad tímto limitem 0,25 USD za stránku smluvní pokuta)
- ✅ Zůstaň odhlášený — nikdy si nevytvářej účet na Craigslistu jen kvůli scrapingu
- ✅ Nikdy neobcházej IP blokace pomocí proxy po explicitním bloku (to potopilo 3Taps)
- ✅ Mezi požadavky přidávej prodlevy — minimálně 2–5 sekund
- ✅ Nescrapuj osobní kontaktní údaje kvůli spamu
- ✅ Nešíř syrová data z Craigslistu ani je nevydávej za vlastní platformu
- ✅ Používej data pro legitimní výzkum, analýzu nebo osobní účely
- ✅ Kde je to možné, preferuj publikované sitemapy před hrubým crawlingem
- ✅ Pokud data ukládáš, odstraňuj PII (emaily, telefonní čísla) už při ingestu
Napsali jsme i podrobnější průvodce o právních dopadech web scrapingu, pokud chceš kompletní obrázek.
Python vs. no-code: která cesta je pro tebe lepší?
| Faktor | Python (requests + BS4) | Thunderbit (No-Code) |
|---|---|---|
| Čas na nastavení | 30–60 min (instalace, psaní kódu) | 2 minuty (instalace rozšíření do Chromu) |
| Potřebné technické znalosti | Středně pokročilý Python | Žádné |
| Možnost úprav | Plná kontrola nad logikou, poli i tokem | AI automaticky rozpozná pole; uživatel je může upravit |
| Škála | Neomezená (s proxy, plánováním) | Scheduled Scraper pro opakované úlohy |
| Ochrana proti blokování | Ruční (hlavičky, prodlevy, proxy, TLS) | Vestavěná (Cloud Scraping) |
| Možnosti exportu | CSV, JSON (napíšeš sám) | Google Sheets, Excel, Airtable, Notion — zdarma |
| Nejlepší pro | Vývojáře, datové vědce, vlastní pipeline | Obchodní týmy, realitní makléře, operations manažery |
Použij Python, pokud potřebuješ plnou kontrolu, plánuješ integraci do větší datové pipeline nebo chceš přesně vědět, co se děje pod kapotou. Použij Thunderbit, pokud chceš výsledky rychle a bez psaní či údržby kódu. Obojí je správně. Záleží na use case a na tom, jestli radši trávíš čas v terminálu, nebo v prohlížeči.
Závěr
Craigslist je bohatý, neustále aktualizovaný zdroj dat pro bydlení, auta, práci, služby, brigády a další oblasti — a protože nemá veřejné API, scraping je jediný způsob, jak z něj získat strukturovaná data ve větším měřítku. Přístup, který v roce 2025 skutečně funguje, je: vytáhnout vložený JSON-LD z výsledků vyhledávání (ne křehké CSS selektory), používat requests + BeautifulSoup (ne Selenium), přidat realistické hlavičky včetně Sec-Fetch-*, náhodně prodlužovat pauzy a při větších objemech použít rezidenční proxy.
Metoda JSON-LD je největší zlepšení oproti zastaralým návodům. Je rychlejší, odolnější vůči změnám rozložení a nevyžaduje žádné renderování JavaScriptem. Když ji spojíš s výše uvedenými anti-ban strategiemi, vyhneš se 403 chybám, na kterých většina scraperů selhává.
Pokud chceš kód úplně přeskočit, Thunderbit Chrome Extension umí scrapovat libovolnou kategorii na Craigslistu během pár kliknutí a exportovat data přímo do tvé oblíbené tabulky nebo databáze. Pokud se chceš ponořit hlouběji, naše návody na jak web scrapovat pomocí Pythonu a best practices web scrapingu pokrývají základy podrobněji.
Vyzkoušej Thunderbit pro scraping Craigslistu
Vyzkoušej AI Web Scraper pro data z Craigslistu Get Started Free
FAQ
Je scraping Craigslistu legální?
Podmínky použití Craigslistu zakazují automatizovaný scraping a obsahují klauzuli o smluvní pokutě (0,25 USD za stránku nad 1 000 denně). Nedávná soudní rozhodnutí — zejména Meta v. Bright Data (2024) a hiQ v. LinkedIn (2022) — ale omezila odpovědnost podle CFAA u scrapingu veřejně dostupných dat, pokud nejsi přihlášený. Riziko deliktů podle státního práva (trespass-to-chattels) ale zůstává, zejména při komerční redistribuci. Dodržuj robots.txt, zůstaň odhlášený, přidávej prodlevy a syrová data dál nešíř. Tohle je obecná informace, ne právní rada.
Má Craigslist veřejné API?
Ne. Craigslist nabízí pouze write-only Bulk Posting Interface (BAPI) pro schválené placené inzerenty. Neexistuje veřejné read API, žádný developerský portál ani tarif s limity pro získávání dat. Každý produkt typu „Craigslist API“, který vidíš na třetích stranách, je neoficiální scraper.
Proč se můj Craigslist scraper pořád rozbíjí?
Téměř vždy kvůli změnám HTML struktury. Craigslist v letech 2023–2024 přepsal markup výsledků vyhledávání a návody používající staré selektory jako .result-row nebo .result-info už nefungují. Přepni na embedded JSON-LD metodu (parsování script#ld_searchpage_results), která je mnohem odolnější. Zkontroluj také, že tvoje hlavičky obsahují Sec-Fetch-* — jejich absence spouští okamžitou blokaci.
Můžu scrapovat Craigslist bez Pythonu?
Ano. AI web scraper v rozšíření do Chromu od Thunderbit funguje na jakékoli stránce Craigslistu — byty, auta, práce, služby. Klikni na „AI Suggest Fields“ pro automatické rozpoznání sloupců, klikni na „Scrape“ pro extrakci dat a exportuj zdarma do Google Sheets, Excelu, Airtable nebo Notionu. Žádné programování, žádné nastavování, žádná správa proxy.
Jak často můžu scrapovat Craigslist, aniž bych byl zablokovaný?
S jednou rezidenční IP je udržitelná propustnost zhruba 0,3–0,5 požadavku za sekundu s náhodnými prodlevami 2–5 sekund mezi stránkami. Drž se pod 1 000 stránkami za 24 hodin na jednu IP, abys se vyhnul blokaci i smluvní pokutě v podmínkách Craigslistu. Scrapování mimo špičku (2:00–6:00 ráno podle lokálního času cílového města) snižuje míru blokování asi o 30–40 %. Pro větší objemy rotuj rezidenční proxy každých 20–30 požadavků.
Zjisti více


