Telegram channel parser — extract messages from open (MTProto) and closed (web) channels
Project description
TgParser
Telegram-канал парсер — утилита для извлечения сообщений из открытых (MTProto API) и закрытых (Web HTML) Telegram-каналов.
Возможности
- Авторизация через 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
# Обновление
pip install --upgrade tgparser-cli
# Установить Playwright браузеры (требуется для web-парсера)
playwright install chromium
💡 После установки через pip может потребоваться добавить папку
ScriptsвPATH, чтобы командаtgparserбыла доступна из любого терминала.Windows:
- Найдите путь: обычно это
%APPDATA%\Python\Python<версия>\Scripts(например,%APPDATA%\Python\Python314\Scripts)- Добавьте его в PATH через PowerShell (от администратора):
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";$env:APPDATA\Python\Python314\Scripts", "User")Или вручную: Системные свойства → Переменные среды → добавить путь вPath.Linux / macOS:
- Путь обычно:
~/.local/bin- Добавьте в
~/.bashrc(или~/.zshrc):export PATH="$HOME/.local/bin:$PATH" source ~/.bashrcАвтоматическая настройка: Вместо ручного добавления можно воспользоваться встроенной командой:
tgparser init # проверит PATH и предложит добавитьПроверить, что
tgparserдоступен:tgparser --help
Настройка
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tgparser_cli-0.2.20.tar.gz.
File metadata
- Download URL: tgparser_cli-0.2.20.tar.gz
- Upload date:
- Size: 57.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6bb405c2f5be8797bf188feca4c70a79f66f896354feb645fc730b3ce5a58728
|
|
| MD5 |
d56dd54af62a488d8f333afbf2a8fedf
|
|
| BLAKE2b-256 |
84272c870432ce9f22d3256fd9f2b0ceb6f1a8423f34f30cea9976d0d4215f9c
|
File details
Details for the file tgparser_cli-0.2.20-py3-none-any.whl.
File metadata
- Download URL: tgparser_cli-0.2.20-py3-none-any.whl
- Upload date:
- Size: 49.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc7b92d3f9814d30017e217a6f009c66e44f7882f4fe5725a5b3a0c4a5710b59
|
|
| MD5 |
3821741becd7aabf017646006690298e
|
|
| BLAKE2b-256 |
2240bc2b363c74fe3d1dea8899c1deb2957977f8787102413318a3eb1ea809a3
|