Jak scrapuji Craigslist pomocí Pythonu (a přitom se nenechám zablokovat)

Poslední aktualizace April 16, 2026
Jak scrapuji Craigslist pomocí Pythonu (a přitom se nenechám zablokovat)

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 firmyCena, plocha, počet ložnic, čtvrť, zeměpisná poloha
Analýza trhu s ojetými autyDealershipy, spotřebitelské aplikace, výzkumníciCena, značka, model, rok, tachometr, stav
Výzkum pracovního trhuNáboráři, pracovní ekonomové, analytici pracovní sílyNázev pozice, odměna, typ úvazku, datum zveřejnění
Generování leadůObchodní týmy, poskytovatelé služebKontaktní údaje, názvy firem, oblast působnosti
Cenová konkurenceschopnostLokální poskytovatelé služeb, e-commerce provozCeny 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.

craigslist_stats_55285c3a34.png

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):

KategorieURL slugTypická pole k extrakci
Byty / bydlení/search/apaCena, plocha, ložnice, lokalita, pravidla pro mazlíčky
Auta a dodávky/search/ctaCena, značka, model, rok, tachometr
Práce/search/jjjNázev pozice, firma, mzda, typ úvazku
Služby/search/bbbNázev, popis, telefonní číslo, oblast
Brigády/search/gggNázev, odměna, datum, kategorie
Na prodej (obecně)/search/sssNázev, cena, stav, lokalita

Můžeš také kombinovat parametry pro filtrování:

ParametrÚčelPříklad
queryKlíčové slovo v plném textu?query=studio
min_price / max_priceCenové rozpětí&min_price=1500&max_price=3000
hasPicPouze inzeráty s obrázky&hasPic=1
postedTodayPosledních 24 hodin&postedToday=1
sortŘazení&sort=priceasc
sOffset 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:

PrvekPů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ů.

Faktorrequests + BeautifulSoupSeleniumPlaywright
Rychlost5–15 stránek/s (omezeno sítí)0,3–1 stránky/s0,5–2 stránky/s
Obsah renderovaný přes JSNeAnoAno
Paměť~30–60 MB~400–700 MB~300–500 MB
Složitost nastaveníNízkáStředníStřední
Odolnost vůči botůmNízká (potřebuje hlavičky/proxy)Střední (reálný prohlížeč)Střední až vyšší
Nejlepší použití pro CraigslistVýsledky vyhledávání (JSON-LD)Detailní stránky s dynamickým obsahemVelké async scrape operace
Náročnost na učeníVhodné pro začátečníkyStř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í:

  1. Otevři libovolnou stránku s výsledky na Craigslistu (byty, auta, práce — jakoukoli kategorii).
  2. 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.
  3. Klikni na „Scrape“ — data se vytáhnou během několika sekund.
  4. 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.
  5. 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í.

craigslist_antibot_ae9ddc3f54.png

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 proxyRiziko detekce na CraigslistuCena (2025)
DatacentrováVelmi vysoké — často blokována hned na první požadavek0,50–2 USD/GB
Rezidenční rotujícíNízké — doporučeno5–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ý Disallow v 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ší?

FaktorPython (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é znalostiStředně pokročilý PythonŽádné
Možnost úpravPlná kontrola nad logikou, poli i tokemAI automaticky rozpozná pole; uživatel je může upravit
ŠkálaNeomezená (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 exportuCSV, JSON (napíšeš sám)Google Sheets, Excel, Airtable, Notion — zdarma
Nejlepší proVývojáře, datové vědce, vlastní pipelineObchodní 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

Ke
Ke
CTO ve Thunderbit | Senior Data Scientist a expert na ML S téměř desetiletou zkušeností v oblasti strojového učení a datové vědy je Ke Shen absolventem Kolumbijské univerzity a bývalým Senior Data Scientist ve Walmart Labs. Díky hlubokým odborným znalostem v Pythonu, R, Javě a statistice, uznávaným i mezi kolegy, sdílí ověřené poznatky o tom, jak převést složité AI algoritmy od teorie až k produkční architektuře.
Obsah

Získej data z webu jen tím, že si o ně řekneš

Řekni, co potřebuješ, obyčejnou angličtinou. Nebo ještě lépe – neříkej nic.

Vyzkoušet Thunderbit zdarma
Získej data pomocí AI
Snadno přenes data do Google Sheets, Airtable nebo Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week