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
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
Примеры
Сохранить 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 # Этот файл
Разработка
Запуск тестов
pytest tests/ -v
Линтинг и форматирование
ruff check src/ tests/
ruff format src/ tests/
Сборка пакета
python -m build
Совместимость
- Python: 3.11, 3.12
- ОС: Windows, Linux, macOS
- Браузер: Chromium (устанавливается через
playwright install chromium)
Планы
- Авторизация (Web + MTProto)
- Парсинг открытых каналов (MTProto)
- Парсинг закрытых каналов (Web)
- Обход защиты от копирования
- Вывод (JSON, CSV, TXT, SQLite)
- Инкрементальный парсинг
- Поддержка Telegram Premium (MTProto)
- Парсинг комментариев
- GUI-интерфейс
Полный 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.1.0.tar.gz.
File metadata
- Download URL: tgparser_cli-0.1.0.tar.gz
- Upload date:
- Size: 42.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
754e6857f7276743f45b3b1d83ce4b8ff05ca1d5ea36bd9db6d66dd756c39b00
|
|
| MD5 |
873c00b14653fcdb9e7d32346674f7d3
|
|
| BLAKE2b-256 |
8e55d81ee26a14cb0ae975400d898986fbdd18e2077d57c0eb4ce07e27c5f990
|
File details
Details for the file tgparser_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tgparser_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 31.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f38164717d790f580d14e55d3c7afa92309af5672cc9578481eb2c958587a5c5
|
|
| MD5 |
89296d0f32e721660c8921709febf607
|
|
| BLAKE2b-256 |
122c985b05f0c9bf04a78ac8122a85ef33ecdfe12c9299f45c2238f970099a51
|