CzechAI Scraping Infrastructure β€” KompletnΓ­ Audit 2026-04-06

Vygenerovano: 2026-04-05 23:59 | Typ: scraping-audit | CzechAI

1. Tok dat: od portalu do databaze

🌐 194 portalu (all_portals_list.json na 134) β”‚ β–Ό mega_all_portals_scraper.py β†’ DISABLED (#DISABLED_BY_PIPELINE) β”‚ Mel iterovat 143 portalu, rate limit 0.5s, dedup URL hash β”‚ Nahrazen: reality-pipeline daemon (22-step orchestrator) β”‚ β–Ό reality-pipeline daemon β†’ CRASHED (ConnectionResetError) β”‚ PM2 id 37, status STOPPED, 28 restarts, nikdo nemonitoruje β”‚ β–Ό Jedine co bezi: β”‚ bezrealitky-scraper (PM2, ONLINE 14D) β†’ idnes.cz + bezrealitky β”‚ drazby-mega (ONLINE 20D) β†’ drazby/aukce β”‚ primy-majitel-pipeline (ONLINE 7D) β†’ hledani primych majitelu β”‚ scraping-data-plane v2.1 (ONLINE 39h) β†’ infrastruktura, nikdo nevola β”‚ β–Ό Parsovani HTML: β”‚ Extrahuje: title, price, area, url, property_type, transaction_type β”‚ NEEXTRAHUJE: description, condition, floor, photos, city_part, street β”‚ Duvod: scraper cte jen LISTING page (seznam), ne DETAIL page β”‚ β–Ό MASTER_LIVE.db na serveru 134 (240 MB, ~227K zaznamu) β”‚ 80 sloupcu v schematu, ~75 z nich PRAZDNYCH β”‚ β–Ό sync_db_from_134.sh (cron kazdych 30 min) β”‚ Prosty SCP celeho souboru: 134 β†’ /tmp β†’ mv β†’ 179 β”‚ ⚠️ PREPISE DB zatimco lokalni writery do ni zapisuji! β”‚ ⚠️ WAL/SHM se nesynchronizuji β†’ SQLite korupce β”‚ β–Ό MASTER_LIVE.db na serveru 179 (kopie) β”‚ β–Ό Enrichment pipeline (179, cronove joby): β”‚ batch_valuate.py β†’ V15f (port 5310) β†’ price_se2 (jen PRODEJE!) β”‚ batch_images.py β†’ OG:image z meta tagu (= placeholder, NE fotka!) β”‚ opportunity_alert.py β†’ is_opportunity flag β”‚ export_signal_json.py β†’ JSON pro dashboardy β”‚ β–Ό Konzumenti: Hunter Agent, Lovec, Dashboard, XLSX export

2. PM2 sluzby β€” co bezi a co ne

Server 134 (Scraper)

SluzbaStatusCo delaProblem
scraping-data-planeONLINE 39hData Plane v2.1 β€” Crawl4AI + Playwright + httpxInfrastruktura OK, ale nikdo ji pravidelne nevola
bezrealitky-scraperONLINE 14Dbezrealitky_connector.pyBezi, ale Sreality data maji spatny transaction_type/price mapping
scout-agentONLINEWeb investigatorReaktivni (na pozadani), neni pravidelny scraper
primy-majitel-pipelineONLINE 7DHleda prime majitele (ne RK)OK
drazby-megaONLINE 20DDrazby/aukceJen aukce
reality-pipelineβ›” STOPPEDHlavni 22-step orchestrator (mel nahradit vsechny disabled crony)CRASHED β€” ConnectionResetError + KeyboardInterrupt. 28 restartu. NIKDO NEMONITORUJE.
enrichment-batchβ›” STOPPEDBatch enrichment detail pagesNikdy nespusten
feature-enrichmentβ›” STOPPEDFeature extractionNikdy nespusten
mega-price-v7β›” STOPPEDCenova mapa v7Legacy, nahrazeno V15f

Server 179 (Enrichment + API)

SluzbaStatusCo dela
v15f-api (5310)ONLINEML valuator, MAPE 3.6%
cenova-mapa-v15 (5150)ONLINEV15f uvicorn server
super-ensemble-v2 (5111)ONLINE7-engine ensemble
znalecky-panel (5112)ONLINE3 AI znalci + RAG (~4min/req)
ocenovac-api (5300)ONLINEGPS/KNN, 145K ref records
hunter-agent (5800)ONLINEDeal hunter
data-watchdogONLINEDB monitor
signal-apiONLINESignal export

3. 194 portalu β†’ kolik se SKUTECNE scrapuje?

⚠️ V souboru all_portals_list.json na serveru 134 je 194 portalu. V cronu je 8 scrapers s #DISABLED_BY_PIPELINE. reality-pipeline daemon (nahradu) CRASHNUL. Vysledek: scrapuji se efektivne 2-3 portaly.
PortalZaznamu v DBStatus scraperu
reality.idnes.cz~99KONLINE (bezrealitky-scraper connector)
sreality.cz~54KDISABLED (cron #DISABLED_BY_PIPELINE)
eurobydleni14KSTARA data (mega_all_portals DISABLED)
bazos.cz14KDISABLED (bazos_hyper_avizo DISABLED)
reality.cz5KLegacy, nescrapuje se
realitymix.cz~7KLegacy
bezrealitky.cz~4KONLINE ale data kvalita spatna
Zbylych ~187 portalu: 0 zaznamu / stara data / nescrapuji se

4. Proc nejsou fotky a udaje

Data v DB maji 80 sloupcu, ale:

PoleVyplnenostProc
title, price, area, url99%Z listing page (jednoduche)
description~0%Vyzaduje navstivit DETAIL page β†’ scraper to nedela
condition (stav bytu)~0%Dtto β€” detail page, CSS selector
floor/patro~0%Dtto
image_url (realna fotka)~0%batch_images.py bere OG:image = sharing placeholder (facebook.png). Realne fotky jsou v Fancybox galerii, nikdo je neextrahuje.
gps_lat/lon~40%geocode_addresses.py cron bezi, ale jen pro zaznamy s parsovanou adresou
price_se2 (odhad ceny)~31%batch_valuate.py bezi, ale V15f ocenuje jen PRODEJE
Hlavni problem: Scraper ma 2 faze:
1. LISTING page (seznam) β†’ URL + title + price + area (BEZI)
2. DETAIL page (inzerat) β†’ popis + fotky + stav + patro + vybaveni (NEBEZI β€” enrichment-batch je STOPPED)

Dokud faze 2 nebezi, 75 ze 80 sloupcu v DB zustane prazdnych.

5. DB sync a korupce

⚠️ ROOT CAUSE opakujici se DB korupce (2Γ— za den 2026-04-05):

sync_db_from_134.sh kazdych 30 min:
1. SCP cely MASTER_LIVE.db (240 MB) z 134 do /tmp/
2. mv /tmp/MASTER_LIVE_sync.db β†’ MASTER_LIVE.db

ZATIMCO na 179 bezi data-watchdog a cenova-mapa-v15 ktere do DB PISUJI.
SQLite nezvlada nahrazeni souboru pod aktivnimi writery β†’ B-tree damage.
WAL a SHM se nesynchronizuji (SCP kopiruje jen .db soubor).

Fix: Nahradit SCP za sqlite3 .backup pres SSH pipe, NEBO zastavit lokalni writery pred sync, NEBO pouzit SQLite replikaci (Litestream).

6. Valuacni retezec

EnginePortStatusPresnostProblem
V15f API5310ONLINEMAPE 3.6%, 90% <5%Jen PRODEJE. Pronajmy nemaji zadny valuator!
Super-Ensemble v2.15111ONLINE7 enginesPotrebuje GPS β†’ chybi pro ~60% zaznamu
Ocenovac5300ONLINEGPS/KNN 145K refOK ale jen pro prodeje
Znalecky Panel5112ONLINE3 AI znalciPomaly (4min/req), jen top deals
cenova-mapa-ai V8 (5093)DEADML ensemblePort nereaguje
cenova-mapa-portaly (5094)DEAD-Legacy mrtvy

7. Kompletni seznam ROZBITYCH veci

  1. reality-pipeline daemon STOPPED na 134 β€” hlavni 22-step orchestrator co mel nahradit 8 disabled cron jobu. Bez nej se scrapuje jen idnes. 190 ze 194 portalu stoji.
  2. sync_db_from_134.sh zpusobuje DB korupci β€” SCP prepise DB zatimco lokalni writery (data-watchdog, cenova-mapa-v15) do ni zapisuji. Kazdy 30min cyklus = riskujeme corrupt.
  3. Detail page enrichment NEBEZI β€” enrichment-batch a feature-enrichment STOPPED na 134. Proto chybi fotky, popisy, stav, patro, vybaveni.
  4. Sreality Connector DISABLED v cronu β€” 54K zaznamu jsou stare, nove nepribyuaji.
  5. Bazos/Hyper/Avizo DISABLED v cronu β€” dalsi portaly stoji.
  6. mega_all_portals_scraper DISABLED β€” 143 portalu z JSON listu se nescrapuje.
  7. batch_images.py bere jen OG:image = sharing placeholder, ne realna fotka bytu.
  8. V15f ocenuje jen prodeje β€” pronajmy nemaji zadny valuation engine.
  9. Crawl4AI endpoint /v1/crawl4ai na routeru vraci 404 β€” chybi nginx location. Data Plane na 134:5100 funguje lokalne ale neni exponovan.

8. Prioritizovany plan oprav

PCo opravitDopadCas
P0Restartovat reality-pipeline daemon na 134 + pridat monitoring (pipeline_watchdog uz existuje, ale nemonitoruje daemon)Ozivi scraping 194 portalu5 min restart + 30 min monitoring
P0Opravit sync_db: nahradit SCP za sqlite3 .backup pres SSH, nebo stopnout lokalni writery pred syncZastavi opakovanou DB korupci30 min
P1Spustit enrichment-batch: pro kazdy zaznam navstivit detail page, extrahovat description + condition + photos (Fancybox a[data-fancybox]) + floor + amenitiesVyplnenost dat z 5% na 80%+2-4h implementace
P1Odkomentovat Sreality Connector v cronu na 134+22K cerstvych Sreality zaznamu/den5 min
P2Pridat pronajem valuator (median Kc/m2 per ctvrt z DB dat, ne ML model)Pronajmy dostanou trzni odhad1-2h
P2Exponovat Crawl4AI z Data Plane pres nginx na router.czechai.io/v1/crawl4aiKazdy agent muze scrapovat detail page pres API15 min
P3Odkomentovat bazos, hyper, avizo, mega_all_portals v cronu+17K zaznamu z dalsich portalu5 min + monitoring