Skip to main content

Telegram channel parser — extract messages from open (MTProto) and closed (web) channels

Project description

TgParser

Telegram-канал парсер — утилита для извлечения сообщений из открытых (MTProto API) и закрытых (Web HTML) Telegram-каналов.

Python Version License: MIT Code style: ruff


Возможности

  • Авторизация через QR-код (Web) или MTProto (Telethon) с сохранением сессии
  • Парсинг открытых каналов — прямое чтение через MTProto API (Telethon)
  • Парсинг закрытых каналов — чтение через web-версию Telegram (Playwright + BeautifulSoup)
  • Обход защиты от копирования — автоматическое снятие CSS user-select: none, блокировки контекстного меню
  • Вывод данных в JSON, CSV, plain-text или SQLite
  • Инкрементальный парсинг — сохранение только новых сообщений
  • CLI-интерфейс на базе Click

Установка

Из исходного кода

# Клонировать репозиторий
git clone https://github.com/borodatych/tgparser.git
cd tgparser

# Создать виртуальное окружение
python -m venv .venv
source .venv/bin/activate  # Linux/macOS
.venv\Scripts\activate     # Windows

# Установить пакет с dev-зависимостями
pip install -e ".[dev]"

# Установить Playwright браузеры (требуется для web-парсера)
playwright install chromium

Через pip

pip install tgparser-cli
playwright install chromium

Настройка

1. Переменные окружения

Скопируйте .env.example в .env и заполните:

cp .env.example .env

Обязательные переменные:

Переменная Описание
API_ID API ID из my.telegram.org
API_HASH API Hash оттуда же
PHONE_NUMBER Номер телефона для MTProto-авторизации (в международном формате)

2. Конфигурационный файл (опционально)

Создайте config.yaml в корне проекта:

parsing:
  scroll_delay_ms: 1500    # задержка между скроллами (web-парсер)
  max_messages: 1000       # лимит сообщений за один запуск
  rate_limit_sleep: 30     # пауза при FloodWait (сек)

storage:
  output_dir: data/output
  session_dir: data/sessions

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

Авторизация

# Web-авторизация (QR-код) — для закрытых каналов
tgparser auth

# Принудительная переавторизация
tgparser auth --force

# MTProto-авторизация — для открытых каналов
tgparser auth --type mtproto

Парсинг открытого канала (MTProto)

tgparser parse open @channel_username

Опции:

  • --limit N — максимум сообщений (по умолчанию 100)
  • --since YYYY-MM-DD — фильтр по дате (сообщения не старше указанной)
  • --until YYYY-MM-DD — фильтр по дате (сообщения не новее указанной)
  • --offset N — смещение от последнего сообщения

Парсинг закрытого канала (Web)

tgparser parse closed https://t.me/channel_username

Опции:

  • --limit N — максимум сообщений
  • --since YYYY-MM-DD — фильтр по дате
  • --until YYYY-MM-DD — фильтр по дате

Примечание: Для закрытых каналов требуется предварительная web-авторизация (tgparser auth).

Экспорт

# Вывод в консоль (plain-text)
tgparser export --input data/output/messages.json

# Сохранение в JSON
tgparser export --input data/output/messages.json --format json --output data/output/export.json

# Сохранение в CSV
tgparser export --input data/output/messages.json --format csv --output data/output/export.csv

# Сохранение в SQLite
tgparser export --input data/output/messages.json --format sqlite --output data/output/export.db

# Инкрементальный экспорт (только новые сообщения)
tgparser export --input data/output/messages.json --incremental

GUI (графический интерфейс)

TgParser поставляется с текстовым графическим интерфейсом, построенным на Textual.

# Запуск GUI
tgparser gui

# Или напрямую через модуль
python -m tgparser.gui

GUI предоставляет удобный интерфейс для:

  • Авторизации (web и MTProto)
  • Парсинга каналов с настройками
  • Просмотра результатов
  • Управления сохранёнными каналами

Примечание: GUI — рекомендуемый способ взаимодействия для большинства пользователей.


Примеры

Сохранить 50 последних сообщений из открытого канала в JSON

tgparser parse open @python_news --limit 50 --format json --output data/output/python_news.json

Сохранить сообщения из закрытого канала за последнюю неделю

tgparser parse closed https://t.me/private_channel --since 2025-01-01

Экспортировать в CSV с инкрементальным режимом

tgparser parse open @tech_news --format csv --output data/output/tech_news.csv
tgparser export --input data/output/tech_news.csv --incremental

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

tgparser/
├── src/
│   └── tgparser/
│       ├── auth/          # Модули авторизации (web, mtproto)
│       ├── parsers/       # Парсеры (mtproto_parser, web_parser)
│       ├── storage/       # Вывод и хранение (JSON, CSV, TXT, SQLite)
│       ├── models/        # Модели данных (Message)
│       ├── cli.py         # CLI-интерфейс (Click)
│       ├── config.py      # Загрузка конфигурации
│       └── utils.py       # Вспомогательные функции
├── tests/                 # Тесты (pytest)
├── data/
│   ├── output/            # Результаты парсинга
│   └── sessions/          # Сохранённые сессии
├── docs/                  # Документация
├── config.yaml            # Конфигурация (опционально)
├── .env                   # Секреты (не в git)
├── pyproject.toml         # Настройки проекта
└── README.md              # Этот файл

Совместимость

  • Python: 3.11, 3.12
  • ОС: Windows, Linux, macOS
  • Браузер: Chromium (устанавливается через playwright install chromium)

Разработка и тестирование

# Запуск всех тестов
pytest tests -v

# Запуск только smoke-тестов GUI
pytest tests/test_gui_smoke.py -v

# Запуск только интеграционных тестов GUI
pytest tests/test_gui_integration.py -v

# Форматирование кода
ruff format src/tgparser tests

# Линтинг
ruff check src/tgparser tests

Сборка standalone-приложения

Для сборки в единый исполняемый файл используется PyInstaller:

# Установить зависимости
pip install -e ".[dev]"

# Собрать one-file executable
python bin/build_standalone.py

# Собрать one-directory bundle
python bin/build_standalone.py --onedir

Готовый исполняемый файл будет в папке dist/.

Планы

  • Авторизация (Web + MTProto)
  • Парсинг открытых каналов (MTProto)
  • Парсинг закрытых каналов (Web)
  • Обход защиты от копирования
  • Вывод (JSON, CSV, TXT, SQLite)
  • Инкрементальный парсинг
  • Поддержка Telegram Premium (MTProto)
  • Парсинг комментариев
  • GUI-интерфейс (Фаза 7) — план в docs/roadmap.md:
  • TUI (Textual) — текстовый графический интерфейс реализован
  • Окна: авторизация, парсинг, результаты/экспорт
  • Прогресс-бар и лог в реальном времени
  • Интеграция с существующими модулями
  • Тесты (smoke + интеграционные) и сборка (PyInstaller)

Полный roadmap: docs/roadmap.md


Лицензия

Проект распространяется под лицензией MIT. Подробнее — в файле LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tgparser_cli-0.2.0.tar.gz (53.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tgparser_cli-0.2.0-py3-none-any.whl (45.6 kB view details)

Uploaded Python 3

File details

Details for the file tgparser_cli-0.2.0.tar.gz.

File metadata

  • Download URL: tgparser_cli-0.2.0.tar.gz
  • Upload date:
  • Size: 53.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tgparser_cli-0.2.0.tar.gz
Algorithm Hash digest
SHA256 77394c18a78860fb6972941580bee9190a66d4b76a9471a2329cec7ac00647bb
MD5 0b2d2c277fc0947ef2fd68f64dd88e3e
BLAKE2b-256 abca7f8cecf896c8ea225466315bdeb43ff4d112fd8a36e5e2a78300ce9c704e

See more details on using hashes here.

File details

Details for the file tgparser_cli-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: tgparser_cli-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 45.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tgparser_cli-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ebeda6b0cd97d2afb748b7db7c41775f9dede45070b2a086537646996749e595
MD5 343101e86c5d72970d6eef0bac081ae3
BLAKE2b-256 48cc5703ed913fe47ca39a7bc20822f0fc037bfac07f3bf5eca01f21ef0e2952

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page