Ybase TSP — документация
Схема базы данных, парсеры, руководство по экспорту, PROJECT_OVERVIEW, PROJECT_STRUCTURE.
Обзор проекта Каталог Заведений
Назначение
Автоматизированная система сбора, нормализации и каталогизации данных о заведениях (рестораны, кафе, магазины, услуги) из различных источников.
Архитектура
Компоненты системы
- Парсеры - сбор данных из внешних источников
- Нормализаторы - очистка и стандартизация данных
- База данных - хранение структурированных данных
- Web-интерфейс - просмотр и управление каталогом
Технологический стек
- Backend: PHP 8.2, Node.js 20
- Database: PostgreSQL 16
- Scraping: Puppeteer, Guzzle HTTP
- Containerization: Docker Compose
- Frontend: HTML, CSS, JavaScript
Источники данных
Основной: Yell.ru
- Покрытие: 83 города России
- Данные: название, адрес, телефон, рейтинг, отзывы, часы работы
- Особенности: стабильный API, хорошая защита от ботов
- Статус: Полностью собрано
Дополнительные (в разработке)
- 2GIS: Полные телефоны, но неполные адреса и редиректы на сайтах
- YP.RU: DDoS-Guard блокирует автоматический парсинг
- Zoon.ru: Таймауты и блокировки
Структура каталога
12 основных категорий
- Рестораны и кафе
- Бары и клубы
- Магазины
- Красота
- Медицина
- Спорт
- Образование
- Развлечения
- Услуги для бизнеса
- Услуги для дома
- Недвижимость
- Транспорт
Система тегов
- Каждое заведение может иметь multiple tags
- Tags маппятся на основные категории через category-mapping.php
Методы парсинга
Yell.ru Parser (PHP)
- Файл:
src/Parser.php - Методы:
parseListPage()- парсинг списка заведенийparseDetailPage()- детальная информацияsaveEstablishment()- сохранение в БДisAdultContent()- фильтрация нежелательного контента
YP.RU Parser (PHP)
- Файл:
src/YpRuParser.php - Статус: ️ Заблокирован DDoS-Guard
2GIS Parser (Node.js + Puppeteer)
- Файл:
puppeteer-parser/parse-2gis-city.js - Статус: ️ Неполные данные (нет адресов, редиректы)
Нормализация данных
DescriptionNormalizer
- Очистка HTML-тегов
- Удаление социальных ссылок и футеров
- Разбиение на семантические параграфы
- Форматирование текста
PhoneExtractor
- Нормализация телефонных номеров
- Поддержка российских форматов
База данных
Основные таблицы
cities- городаcategories- категорииcompanies- заведенияcompany_categories- связь many-to-manyparsing_progress- отслеживание прогресса
Поля companies
- id, name, address, phone, website
- description, rating, reviews_count
- city_id, source, source_url
- created_at, updated_at
Статистика
Собрано данных (Yell.ru)
- Городов: 83
- Всего заведений: ~3000+
- По категориям: от 100 до 500 на категорию
Покрытие по городам
- Крупные (Москва, СПб): 200+ заведений
- Средние: 50-150 заведений
- Малые: 10-50 заведений
Выгрузка данных
Форматы
- SQL dump
- JSON
- CSV
Инструкция по выгрузке
См. docs/EXPORT_GUIDE.md
Развертывание
Требования
- Docker 20+
- Docker Compose 2+
- 4GB RAM минимум
Запуск
docker compose up -d
Доступ
- Web: http://localhost:3000
- Adminer: http://localhost:8080