@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 1 day ago
src fix: increase ingest timeout to 300s and cap images at 15 per listing 1 day ago
.gitignore Implement MVP DOM.RIA parser with curl_cffi scraping 1 day ago
Dockerfile Implement MVP DOM.RIA parser with curl_cffi scraping 1 day ago
README.md Implement MVP DOM.RIA parser with curl_cffi scraping 1 day ago
TECH_SPEC.md Implement MVP DOM.RIA parser with curl_cffi scraping 1 day ago
requirements.txt Implement MVP DOM.RIA parser with curl_cffi scraping 1 day ago
README.md

DOM.RIA Parser

Парсер оголошень нерухомості з dom.ria.com/uk для локального сервісу data_collector.

Швидкий старт

# Встановлення залежностей
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

# Dry-run (без відправки в data_collector)
python -m src.main --city kiev --category 1 --operation sale --max-pages 1 --dry-run

# Реальний запуск (1 сторінка)
python -m src.main --city kiev --category 1 --operation sale --max-pages 1

# Всі міста, всі категорії, всі операції (довгий!
python -m src.main

Аргументи CLI

Параметр Опис
--city Slug міста (можна декілька). За замовчуванням — всі.
--category ID категорії: 1=квартири, 2=будинки, 3=земля, 4=комерція, 5=гаражі.
--operation sale, rent, rent_daily. За замовчуванням — всі.
--max-pages Обмеження кількості сторінок каталогу на один target.
--dry-run Парсити, але не відправляти в data_collector і не писати в SQLite.
--db Шлях до SQLite БД для resume (domria_resume.db).
--collector-url URL data_collector (http://localhost:8020).

Архітектура

src/
├── config.py       # URL-патерни, міста, категорії, ліміти швидкості
├── session.py      # curl_cffi Session з impersonate + cookies
├── parser.py         # Витягування __INITIAL_STATE__ з HTML
├── normalizer.py   # Нормалізація raw DOM.RIA → payload data_collector
├── collector.py    # HTTP-клієнт для POST /api/v1/ingest
├── storage.py      # SQLite resume / deduplication
├── crawler.py      # Основний цикл: каталог → деталі → ingest
└── main.py         # CLI entry point

Особливості реалізації

  • curl_cffi із impersonate="chrome124" — єдиний робочий спосіб обходу анти-боту DOM.RIA.
  • Session cookies — обов’язковий warmup через головну сторінку перед запитом каталогу.
  • Формат URL: /{operation}-{type}/{city}/?page=N (напр. /prodazha-kvartir/kiev/?page=1).
  • Rate limits: 10с між сторінками, 10с між детальними сторінками, пауза 2 хв кожні 50 сторінок.
  • Resume: SQLite база запобігає повторній обробці вже зібраних оголошень.

Docker

docker build -t domria-parser .
docker run --rm --network host domria-parser --city kiev --category 1 --max-pages 1 --dry-run

Ліцензія

Внутрішній проєкт VMK.