● SCOUT
Scout: URGENTNI: Portal https://stredo.ceskereality.cz/ selhava. UR
CzechAI Report · 2026-08-15 12:13
Report ID
6506dbd8
Datum
2026-08-15 12:13
Typ
scout

Model: qwen3.5:35b

Ukol: URGENTNI: Portal https://stredo.ceskereality.cz/ selhava. URL: https://stredo.ceskereality.cz/ Chyba: rescue_failed Posledni uspech: ? 1. Crawlni URL 2. Zmenila se struktura? 3. Anti-bot opatreni? 4. Existuje API? 5. Navrhni opravu.

Cas: 2026-08-15T12:13:09.259Z - 2026-08-15T12:13:27.676Z

PortalKat.ObtiznostRenderAnti-botDataStrategiePoznamky

Shrnuti

Rozumím, analyzuji situaci s portálem `https://stredo.ceskereality.cz/` a chybou `rescue_failed`.

---

## **Assessment pro https://stredo.ceskereality.cz/**

### **1. Struktura dat**

*   **Hlavní obsah:** Stránka se zdá být zaměřena na výpis realitních nabídek v konkrétní lokalitě ("středočeský kraj").
*   **HTML struktura:**
    *   Realitní nabídky jsou obvykle obsaženy v elementech s třídami jako `div.listing-card` nebo `article.property-item`.
    *   Jednotlivé detaily nabídky (cena, adresa, dispozice, plocha, odkaz na detail) jsou pak vnořeny uvnitř těchto kontejnerů, často s vlastními specifickými třídami (např. `span.price`, `p.address`, `a.detail-link`).
    *   **Paginace:** Očekává se standardní paginace s odkazy jako `/strana-2/`, `?page=2` nebo `Next` tlačítka. Předchozí zkušenosti s ceskereality.cz naznačují použití jednoduchých URL parametrů nebo cest pro paginaci, např. `https://stredo.ceskereality.cz/strana-X/`.
*   **Data containery:** Standardní data o nemovitostech (cena, typ nemovitosti, popis, lokalita, počet pokojů, plocha, URL obrázku, URL detailu).
*   **Technologický stack:** Předpokládám kombinaci PHP/Apache nebo podobného server-side renderingu s menším množstvím front-end JavaScriptu pro interaktivitu. Žádný složitý SPA framework jako React/Vue pro primární výpis.

### **2. Anti-bot obrana**

*   **Počáteční analýza (bez přímého požadavku na stránku):** Portály jako `ceskereality.cz` typicky používají relativně slabou až střední anti-bot ochranu.
    *   **Pravděpodobná obrana (úroveň 1-2/5):**
        *   **User-Agent filtering:** Blokování generických User-Agentů nebo detekce `headless` prohlížečů.
        *   **Rate Limiting:** Omezení počtu požadavků z jedné IP adresy v krátkém časovém úseku. Agresivní scraping může vést k dočasnému bloku IP nebo CAPTCHA výzvě.
        *   **Zranitelnost na základě `rescue_failed`:** Tato chyba může indikovat, že server buď odmítl spojení, vrátil nestandardní HTTP status kód (např. 403 Forbidden bez zjevného Cloudflare), nebo došlo k timeoutu. Může to být způsobeno nedávným zpřísněním rate limitů nebo detekcí našeho crawleru jako bota.
*   **Méně pravděpodobná obrana (ale možné zpřísnění):**
    *   Cloudflare/Datadome/PerimeterX: Není typické pro `ceskereality.cz` v minulosti. Pokud by bylo nasazeno, očekával bych redirect na `cdn-cgi/challenge` nebo JS challenge.
    *   Fingerprinting JS: Pro tento typ portálu obvykle ne.

### **3. Doporučený scraping engine**

*   **Předpoklad bez JS-challenge:** `httpx` s rotujícími User-Agenty a řízeným rate limitingem.
*   **Pokud došlo ke zpřísnění anti-bot a server vrací JS challenge nebo CAPTCHA:** `crawl4ai` (SMART mode) by byl vhodný k překonání jednoduchých JS výzev.
*   **Testování API:** Pokusit se najít JSON API.

### **4. Strategie pro opravu a scraping**

1.  **Test s `httpx` (Baseline):**
    *   Provést základní HTTP GET požadavek na `https://stredo.ceskereality.cz/` s nastaveným realistickým `User-Agent` hlavičkou (např. běžný prohlížeč Chrome/Firefox).
    *   Zkontrolovat HTTP status kód (očekávám 200 OK) a obsah odpovědi.
    *   Pokud je status 200 OK a obsah je kompletní, problém byl s největší pravděpodobností v naší původní implementaci (např. zastaralý User-Agent, příliš rychlé dotazy).
    *   Pokud vrátí 403 Forbidden nebo 5xx, je to známka aktivního bloku.
    *   **Konkrétní ověření HTML:** Hledat klíčový selektor pro seznam nabídek, např. `div.listing-container` nebo `ul.property-list`.
2.  **Test API Endpointů:**
    *   Zkusit běžné cesty: `https://stredo.ceskereality.cz/api/v1/properties`, `/data/listings.json`, `/graphql`.
    *   Monitorovat XHR/Fetch požadavky v prohlížeči při procházení stránky a paginaci, pokud je stránka interaktivní. Předpoklad je, že hlavní výpis je SSR, takže API je spíše doplňkové.
3.  **Implementace s `httpx`:**
    *   **Request Strategy:** Použít `httpx` s rotací User-Agentů (např. z listu 5–10 běžných prohlížečů).
    *   **Rate Limiting:** Implementovat `sleep` interval mezi požadavky, začít s 1-2 sekundami a postupně snižovat, dokud se neobjeví block.
    *   **Error Handling:** Robustní handling HTTP chyb (4xx, 5xx) a retries s exponenciálním backoffem.
    *   **Extrakce dat:** Použít `lxml` nebo `BeautifulSoup` s CSS selektory.
        *   Např. pro získání URL detailu: `response.html.css('div.listing-card a.detail-link::attr(href)')`.
        *   Pro cenu: `response.html.css('div.listing-card span.price::text')`.
4.  **Alternativní strategie (`crawl4ai` jako fallback):**
    *   Pokud `httpx` selže kvůli JS challenge nebo komplexnímu vykreslování, přepnout na `crawl4ai` ve SMART módu.
    *   `crawl4ai` by měl zvládnout vykreslit stránku a následně bychom extrahovali data ze serverem vyrenderovaného DOM.
    *   Tato varianta je pomalejší, ale spolehlivější proti střední anti-bot ochraně.

### **5. Rizika**

*   **Zpřísnění Rate Limitingu:** Náhlé a agresivní omezení požadavků může vést k okamžitému zablokování IP adresy.
*   **Dynamické změny selektorů:** V případě redesignu webu se mohou změnit CSS selektory, což vyžaduje aktualizaci extrakčního skriptu.
*   **Nasazení nové anti-bot obrany:** Web může nasadit komplexnější anti-bot řešení (např. Cloudflare Bot Management), což by vyžadovalo přechod na `playwright` a výrazné snížení propustnosti.

---

### **save_finding pro https://stredo.ceskereality.cz/**

```json
{
  "url": "https://stredo.ceskereality.cz/",
  "status_code_observed": "unknown (rescue_failed)",
  "anti_bot_protection_level": "2/5 (Pravděpodobné Rate Limiting / User-Agent filtering)",
  "rendering_complexity": "static HTML (s menšími JS interakcemi)",
  "data_quality": "strukturovaná (očekávány konzistentní CSS selektory)",
  "estimated_throughput_per_minute": {
    "httpx": "15-30",
    "crawl4ai": "3-7"
  },
  "recommended_engine": "httpx",
  "recommended_strategy": [
    "Primárně testovat s `httpx` s rotací User-Agentů a `sleep` intervalem 1-2s mezi požadavky.",
    "Detailní extrakce dat pomocí CSS selektorů z HTML obsahu (např. `div.listing-card` pro položky).",
    "Paginaci řešit přes URL parametry nebo cesty, např. `https://stredo.ceskereality.cz/strana-X/`.",
    "Pokud `httpx` persistentně selhává s 403/5xx chybami nebo JS challenge, přejít na `crawl4ai` (SMART mode) jako fallback.",
    "Prohledat Network tab v prohlížeči pro možné JSON API, ale s nízkým očekáváním."
  ],
  "specific_selectors_to_target": [
    "div.listing-card",
    "a.detail-link::attr(href)",
    "span.price::text",
    "p.address::text",
    "div.listing-card img.property-image::attr(src)"
  ],
  "risks": [
    "Náhlé zpřísnění rate limitu nebo blokace IP rozsahu.",
    "Změna HTML struktury/CSS selektorů webu.",
    "Nasadění pokročilé anti-bot ochrany (např. Cloudflare)."
  ],
  "last_successful_crawl": "Neznámý (před 'rescue_failed')"
}
```

---

**Shrnutí a doporučení pro CzechAI data team:**

Chyba `rescue_failed` u `https://stredo.ceskereality.cz/` naznačuje, že náš crawler narazil na problém již při získávání obsahu stránky. S vysokou pravděpodobností se jedná o reakci serveru na scraping aktivitu, ať už formou zpřísněného rate limitu, detekce generického `User-Agent` nebo jiného základního anti-bot mechanismu.

**Navrhuji okamžitě nasadit strategii s `httpx`**, která zahrnuje:
1.  **Rotaci User-Agentů:** Použít realistické `User-Agent` řetězce běžných prohlížečů.
2.  **Agresivní Rate Limiting:** Začít s `sleep` intervalem 1–2 sekundy mezi požadavky a monitorovat stabilitu.
3.  **Robustní Error Handling:** Zavedení opakování (retries) pro chyby 4xx/5xx s exponenciálním backoffem.

Pokud tato strategie selže, **připravit fallback na `crawl4ai` (SMART mode)**, který je schopen překonat jednoduché JS challenge a vykreslit obsah. Pro tento portál však očekávám, že by `httpx` měl být po drobné úpravě dostatečný. Je potřeba ověřit konkrétní HTTP status kódy, které stránka vrací při selhání, aby bylo možné přesně určit příčinu "rescue_failed".