Skip to content

About

Real estate data pipeline for collecting, analyzing and visualizing Cian listings.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

🏠 Cian Parser

Парсер объявлений о продаже недвижимости с сайта Cian.ru с возможностью анализа и визуализации собранных данных.

📋 Описание

Проект позволяет автоматически собирать детальную информацию об объявлениях о продаже квартир на Cian.ru и проводить их последующий анализ. Парсер обходит ограничения пагинации через разбиение на ценовые диапазоны и использует задержки между запросами для предотвращения блокировок.

Собираемые данные

  • Основная информация: заголовок, цена, количество комнат
  • Местоположение: адрес, координаты (широта/долгота)
  • Транспортная доступность: ближайшие станции метро и время до них
  • Характеристики квартиры: площадь, этаж, состояние и другие параметры
  • Характеристики дома: год постройки, тип дома, материал стен
  • Описание: полный текст объявления

🚀 Установка

Требования

  • Python 3.10+
  • pip

Установка зависимостей

pip install -r requirements.txt

⚙️ Настройка

Все настройки находятся в файле config.py:

# Основные параметры поиска
DEAL_TYPE = "sale"          # Тип сделки: "sale" (продажа) или "rent" (аренда)
ROOMS = 1                   # Количество комнат
REGION = 1                  # Регион (1 = Москва)

# Диапазоны цен для парсинга
LIMITS = tuple(range(10_000_000, 250_000_000 + 1, 1_000_000))

# Задержки между запросами (в секундах)
DELAY_BETWEEN_PAGES = (1, 3)    # Между страницами списка
DELAY_BETWEEN_ADS = (1, 2)      # Между объявлениями

# Файл для сохранения результатов
OUTPUT_DIRNAME = "trash"
OUTPUT_FILENAME = "test"

📖 Использование

Запуск парсера

python main.py

Парсер начнет собирать данные согласно настройкам в config.py и сохранит результаты в JSON-файл.

Пример вывода

📁 Данные будут сохранены в файл: trash/test.json

Фильтры: мин. 10000000 макс. 11000000
Всего объявлений по заданным фильтрам: 245
https://www.cian.ru/cat.php?...

🔍 Загружаем страницу 1...
Найдено 28 объявлений
📄 [1] Парсим страницу объявления: https://www.cian.ru/sale/flat/...

📊 Анализ данных

В папке analyse/ находятся скрипты для анализа собранных данных:

  • import_json.py - импорт данных из JSON
  • remove_dublicates.py - удаление дубликатов
  • load_to_ch.py - загрузка данных в ClickHouse
  • histogram.py - построение гистограмм распределения цен
  • boxplot.py - боксплоты для анализа выбросов
  • heatmap.py - тепловая карта объявлений на географической карте
  • district.py - анализ по районам

📈 Примеры результатов

Примеры собранных данных и визуализаций доступны в папке examples/.

Распределение цен

Распределение цен

Интерактивная тепловая карта

Помимо статических графиков, проект позволяет визуализировать собранные объявления на интерактивной карте. Цены агрегируются по H3-гексагонам, после чего карта отображается с помощью Folium/Leaflet.

Тепловая карта

Интерактивную версию можно открыть в браузере:

examples/visualizations/heatmap.html

Подробнее см. examples/README.md

🏗️ Структура проекта

cian_parser/
├── parsers/              # Модули парсинга
│   ├── fetcher.py       # HTTP-клиент с повторными попытками
│   ├── list_parser.py   # Парсинг страниц со списком объявлений
│   └── detail_parser.py # Парсинг детальных страниц объявлений
├── utils/               # Вспомогательные утилиты
│   ├── file_paths.py    # Работа с путями к файлам
│   ├── json_writer.py   # Запись данных в JSON
│   └── price_ranges.py  # Генерация ценовых диапазонов
├── analyse/             # Скрипты анализа данных
├── config.py            # Конфигурация парсера
├── main.py              # Точка входа
└── requirements.txt     # Зависимости проекта

🛡️ Особенности реализации

Обход ограничений

  • Разбиение на ценовые диапазоны: Cian ограничивает пагинацию, поэтому парсер разбивает поиск на множество узких ценовых диапазонов
  • Ротация User-Agent: используется пул различных User-Agent для имитации разных браузеров
  • Задержки между запросами: случайные паузы предотвращают блокировку по частоте запросов
  • Повторные попытки: автоматический retry при сетевых ошибках и HTTP 429

Надежность

  • Обработка ошибок на каждом этапе
  • Логирование прогресса парсинга
  • Сохранение данных в процессе работы (не требуется ждать завершения всего парсинга)

⚠️ Важные замечания

  1. Соблюдайте robots.txt и условия использования сайта Cian.ru
  2. Не злоупотребляйте частотой запросов - используйте разумные задержки
  3. Используйте данные ответственно - только для личных, образовательных или исследовательских целей
  4. Структура HTML-страниц может измениться, что потребует обновления селекторов

📝 Лицензия

MIT License - см. файл LICENSE

🤝 Вклад в проект

Если вы нашли баг или хотите предложить улучшение:

  1. Создайте Issue с описанием проблемы
  2. Сделайте Fork репозитория
  3. Создайте ветку для ваших изменений
  4. Отправьте Pull Request

📧 Контакты

Если у вас есть вопросы или предложения, создайте Issue в репозитории.

About

Real estate data pipeline for collecting, analyzing and visualizing Cian listings.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages