Skip to content

RibasomR/2gis-parser

Repository files navigation

🔍 2GIS Parser — Парсер организаций из 2ГИС

Собирает контакты организаций из 2ГИС в Excel через Telegram-бота.
Вводишь запрос, выбираешь города — получаешь таблицу с телефонами, email, сайтами и рейтингами.

ВозможностиБыстрый стартКак это работаетНастройкаЛицензия

Python Telegram Patchright Docker License


В 2ГИС миллионы организаций с телефонами, email, сайтами и отзывами. Но кнопки «Экспорт» нет. Нужен список всех сантехников в Москве или всех ресторанов в Новосибирске? Сиди копируй по одному.

Этот бот делает это за тебя. Пишешь что ищешь и в каких городах — он запускает стелс-браузер, прокручивает все результаты, кликает на каждую карточку за деталями и отдаёт готовый Excel-файл прямо в Telegram. Разворачивается на VPS через Docker за пару минут.

Возможности

  • Поиск по рубрике — вводишь любой запрос («рестораны», «автосервис», «стоматология»)
  • Несколько городов — до 5 городов за один запрос
  • Антидетект — headless Chromium через Patchright (стелс-форк Playwright)
  • Бесконечный скролл — автоматически подгружает все результаты, кликает на каждую карточку
  • Прогресс в реальном времени — прогресс-бар в Telegram с кнопкой отмены
  • Экспорт в Excel — форматированный XLSX со всеми данными
  • История экспортов — повторная загрузка мгновенно через кеш Telegram
  • Контроль доступа — опциональный белый список Telegram ID

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

Поле Описание
Название Название организации
Описание Описание деятельности
Сайт Официальный сайт
Email Контактный email
Телефоны Все указанные номера
Адрес Улица, дом
Город Город
Рубрика Категория организации
Рейтинг Звёзды
Отзывы Количество отзывов

Быстрый старт

Docker (рекомендуется)

git clone https://github.com/RibasomR/2gis-parser.git && cd 2gis-parser

cp .env.example .env
nano .env  # Вписать BOT_TOKEN

docker compose up -d

Без Docker

python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
patchright install chromium
cp .env.example .env  # Вписать BOT_TOKEN
python bot/main.py

Как это работает

Типичная сессия:

Ты:   /start
Бот:  👋 Отправь поисковый запрос

Ты:   автосервис
Бот:  🏙️ Добавляй города (до 5 шт). Когда готово — /done

Ты:   Москва
Бот:  ✅ Москва добавлена (1/5)

Ты:   Санкт-Петербург
Бот:  ✅ Санкт-Петербург добавлен (2/5)

Ты:   /done
Бот:  🔍 Превью:
      Москва — 342 результата
      Санкт-Петербург — 218 результатов
      Итого: 560 организаций
      ▶️ Начать парсинг?

Ты:   ✅ Старт
Бот:  ⏳ Парсинг... [████████░░░░] 45% (252/560)
      ...
Бот:  ✅ Готово! 560 организаций выгружено.
      📎 автосервис_2города.xlsx

Под капотом бот запускает Chromium, имитирует действия пользователя, обходит защиту 2ГИС и собирает данные с каждой карточки. Парсинг одной карточки занимает ~3-5 секунд.

Настройка

Переменная Обязательна По умолчанию Описание
BOT_TOKEN Да Токен Telegram-бота
DB_PATH Нет data/bot.db Путь к SQLite базе
MAX_CITIES Нет 5 Макс. городов за запрос
MAX_ORGS_PER_EXPORT Нет 500 Макс. организаций за экспорт
PARSE_DELAY_MIN Нет 3.0 Мин. задержка между действиями (сек)
PARSE_DELAY_MAX Нет 5.0 Макс. задержка (сек)
ALLOWED_USERS Нет Telegram ID через запятую (пусто = доступ всем)

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

2gis-parser/
├── bot/                # Telegram-бот (aiogram 3.x)
│   ├── handlers/       # FSM-хендлеры (поиск, парсинг, история)
│   ├── main.py         # Точка входа
│   ├── config.py       # Настройки (Pydantic)
│   ├── middlewares.py   # Контроль доступа, регистрация
│   └── keyboards.py    # Инлайн-клавиатуры
├── parser/             # Автоматизация браузера
│   ├── scraper.py      # Логика парсинга 2ГИС (Patchright)
│   ├── browser.py      # Управление жизненным циклом браузера
│   └── models.py       # Модели данных
├── db/                 # SQLite база
│   ├── engine.py       # Асинхронное подключение
│   ├── models.py       # Модели БД
│   └── schema.sql      # Схема
├── export/             # Генерация Excel
│   └── excel.py        # Форматирование XLSX
├── docker-compose.yml
├── Dockerfile
└── requirements.txt

Стек

  • Python 3.10+ — async/await
  • aiogram 3.x — Telegram Bot API
  • Patchright — антидетект-форк Playwright (headless Chromium)
  • SQLite + aiosqlite (WAL mode)
  • openpyxl — генерация Excel
  • pydantic-settings — конфигурация
  • Docker — деплой

Важно

  • 2ГИС использует обфусцированные CSS-классы, которые меняются при каждом обновлении сайта. Если парсинг сломался — нужно обновить селекторы в parser/scraper.py
  • Рекомендуется запускать на VPS с датацентровым IP
  • Используйте ответственно и с уважением к ресурсам 2ГИС

Лицензия

Проект распространяется под лицензией MIT.

About

Telegram bot for scraping business data from 2GIS with Excel export. Anti-detection headless browser, multi-city support.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors