Ybase TSP — документация

Схема базы данных, парсеры, руководство по экспорту, PROJECT_OVERVIEW, PROJECT_STRUCTURE.

Обзор проекта Каталог Заведений

Назначение

Автоматизированная система сбора, нормализации и каталогизации данных о заведениях (рестораны, кафе, магазины, услуги) из различных источников.

Архитектура

Компоненты системы

  1. Парсеры - сбор данных из внешних источников
  2. Нормализаторы - очистка и стандартизация данных
  3. База данных - хранение структурированных данных
  4. 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 основных категорий

  1. Рестораны и кафе
  2. Бары и клубы
  3. Магазины
  4. Красота
  5. Медицина
  6. Спорт
  7. Образование
  8. Развлечения
  9. Услуги для бизнеса
  10. Услуги для дома
  11. Недвижимость
  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-many
  • parsing_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