reelminner
💡 Примечание о названии: Окончательное публичное название этого проекта — Reelminner. Класс Python-движка называется
Reelminner(см.scraper.py), CLI/GUI и MCP-сервер имеют брендreelminner, а репозиторий GitHub —reelminner. Более раннее рабочее кодовое имя ReelSnipe полностью выведено из употребления. Другие варианты названий перечислены в Варианты названий.
📚 Содержание
Related MCP server: Instagram Complete MCP Server
Что такое Reelminner
Reelminner — это набор инструментов с открытым исходным кодом, который извлекает структурированные данные из Instagram Reels
и профилей, которые их опубликовали. Он построен на едином, многократно используемом движке
(Reelminner), который доступен четырьмя различными способами:
Интерфейс | Файл | Лучше всего подходит для |
🖥️ Настольный GUI |
| Нетехнических пользователей, извлечение в один клик |
⌨️ CLI |
| Продвинутых пользователей, пакетных заданий, скриптов |
🤖 MCP-сервер |
| AI-агентов / рабочих процессов LLM |
🐍 Python API | импорт | Встраивания в ваш собственный код |
Все используют одну и ту же логику парсинга, сессий и ограничения скорости, поэтому результаты идентичны независимо от того, какой интерфейс вы используете.
✨ Возможности
Многоуровневый парсинг Reel — Reelminner читает данные из нескольких слоёв (встроенный JSON, ответы GraphQL и резервный вариант на основе живого DOM), поэтому он продолжает работать, даже когда Instagram изменяет один из них.
Обогащение профиля владельца — для каждого Reel он может автоматически получать
username,full_name,bio,followers,is_verifiedиreels_countавтора.Извлечение количества подписчиков — получается через GraphQL-запрос
UserByRestrictedView/GraphQLOwnerInfoот Instagram, с резервным вариантом на основе DOM и пагинацией (обрабатывает ограниченные значения подписчиков, такие как «1.2M», прокручивая профиль).Метаданные музыки — аудио Reel:
music_title,music_artistиmusic_id.Показатели вовлечённости —
views,likes,comments, а также прямойvideo_url/thumbnail.Управление сессией и входом — интерактивный QR/вход, импорт cookie из экспорта EditThisCookie и 24-часовое обновление сессии, чтобы вам не приходилось постоянно входить заново.
Параллельное извлечение — пул потоков (
--workers, по умолчанию 3) с вежливыми задержками между запросами (--delay, по умолчанию 2 с) и адаптивной паузой при получении от InstagramBLOCKED/RATE_LIMITED.Устойчивое отслеживание статуса — каждая строка содержит код
status(OK,PARSED_PARTIAL,FAILED,NO_DATA,BLOCKED,RATE_LIMITED), чтобы вы точно знали, что удалось.Несколько форматов экспорта — CSV (по умолчанию), JSON и Excel (
.xlsxчерезopenpyxl).MCP-сервер — пять стабильных инструментов, чтобы AI-агент (Claude, Cursor и т. д.) мог извлекать, проверять статус, импортировать cookie, останавливать и экспортировать.
Настольный GUI — встроенная тёмная тема, поле для вставки URL, таблица результатов в реальном времени, правый клик копировать URL / открыть Reel и экспорт в один клик.
Протестировано — набор pytest + сквозной QA-конвейер, который обеспечивает соблюдение порогов качества данных.
🧠 Как это работает
┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
│ GUI │ │ CLI │ │ MCP srv │ │ Python │
│ gui.py │ │ scraper.py │ │mcp_server │ │ import │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘
└────────────────┴────────────────┴────────────────┘
▼
┌───────────────────────┐
│ Reelminner │ ← the engine (scraper.py)
│ • session / cookies │
│ • thread pool │
│ • adaptive back‑off │
└───────────┬───────────┘
▼
┌───────────────────────┐
│ parsers.py │ ← pure extraction helpers
│ parse_reel_page / json│
│ parse_owner / music │
│ regex adapters │
└───────────────────────┘Нормализация входного URL (
normalize_reel_url), чтобы работали и/reel/X/, и/reel/s/…/.Загрузка сессии — применение сохранённых cookie (
sessionid,csrftoken,ds_user_id,ig_did,mid,rur) или вход в систему.Получение и парсинг страницы Reel с многоуровневым резервным вариантом:
parse_reel_page→ встроенныйwindow.__additionalData/sharedDataHTML JSONparse_reel_json→ сырой GraphQLGQLответparse_graphql_reel→ объектshortcodeMediaРезервный вариант на основе DOM →
_extract_text_rawзапрашивает живую страницу для лайков / комментариев / просмотров / подписчиков через адаптеры регулярных выражений.
Обогащение владельца (если не указано
--no-profiles): получение профиля и чтениеfollowers,full_name,bio,is_verified,reels_count.Соблюдение ограничений: пауза
delayмежду запросами; при блокировке — пауза и повтор.Запись строк в CSV / JSON / Excel со статусом
statusдля каждой строки.
🏗️ Архитектура проекта
Reelminner — это дизайн «один движок, несколько интерфейсов». Один основной движок
(Reelminner) выполняет всю реальную работу; GUI, CLI, MCP-сервер и
Python API — это тонкие интерфейсы, которые вызывают его. Это обеспечивает идентичность парсинга, обработки
сессий и ограничения скорости во всех точках входа.
┌─────────────────────────────┐
URL(s) in ──────▶│ Reelminner │ scraper.py
│ ── engine / orchestrator ── │
└───────┬───────────┬──────────┘
run scrapes │ │ enrich owner
▼ ▼
┌────────────────┐ ┌──────────────────┐
│ parsers.py │ │ session + graphql│
│ pure extractors │ │ (followers/music)│
└───────┬────────┘ └─────────┬────────┘
└─────────┬────────────┘
▼
ReelData row + status
▼
CSV / JSON / Excel writersОбязанности модулей
Файл | Роль | Ключевые публичные символы |
| Основной движок + CLI. Владеет браузером, сессией, пулом потоков и писателями. |
|
| Чистые вспомогательные функции извлечения — без браузера, легко тестировать. |
|
| Настольное приложение Tkinter. Создаёт окно, меню, поле URL, ползунок рабочих процессов, таблицу результатов и диалоги экспорта. |
|
| Стилизация GUI — применяет тёмную тему к виджетам |
|
| MCP-сервер — предоставляет движок как 5 инструментов для AI-агентов через stdio. |
|
| Упаковка — сборка в один файл PyInstaller. |
|
| QA-конвейер — запускает движок на корпусе данных и обеспечивает соблюдение порогов качества данных. |
|
Внутренности движка (Reelminner)
Слой сессии —
_SESSION_COOKIE_NAMES(sessionid,csrftoken,ds_user_id,ig_did,mid,rur);_apply_cookies(),_refresh_if_needed()(24 ч),login()(интерактивный QR),clear_session().Параллелизм —
scrape()запускаетThreadPoolExecutor(max_workers=workers); каждый URL обрабатывается через_worker→_scrape_url, который вызывает_gather_metadata(данные Reel) и, при необходимости,_gather_article(профиль владельца). Семафор +_sleep()обеспечивают вежливость;status_code/retcodeуправляют адаптивным циклом повтора/паузы, когда Instagram возвращаетBLOCKED/RATE_LIMITED.Конвейер парсинга (многоуровневый резервный вариант) — внутри
_gather_metadataдвижок пробует по порядку:parse_reel_page(встроенный HTML JSON) →parse_reel_json(сырой GraphQLGQL) →parse_graphql_reel(shortcodeMedia) → резервный вариант на основе DOM через адаптеры_extract_text_html/_extract_text_rawи список регулярных выражений_PATTERNS(лайки/комментарии/просмотры/подписчики).Обогащение профиля —
get_follower_count()использует GraphQL-запрос InstagramUserByRestrictedView/GraphQLOwnerInfo, переходя к DOM и пагинации подписчиков (_fetch_followersсend_cursor), когда значения ограничены.Вывод — строки собираются как словари
ReelDataи записываются черезwrite_csv(с учётомcsv_columns),export_jsonилиexport_excel(требуетсяopenpyxl).
Почему такая структура
Тестируемость — весь парсинг находится в
parsers.pyбез зависимости от браузера, поэтомуtests/test_parsers.pyможет проверять сохранённые HTML/JSON фикстуры.Единый источник истины — каждый интерфейс использует один и тот же
Reelminner, поэтому исправление в движке одновременно улучшает GUI, CLI и MCP-сервер.Безопасная упаковка — тонкие оболочки GUI/CLI означают, что EXE PyInstaller включает только движок + минимальный интерфейс, что сохраняет небольшой размер бинарного файла.
📦 Установка
Требования: Python 3.10+ и браузерный движок Playwright.
# 1. Clone
git clone https://github.com/ilovekushgola/reelminner.git
cd reelminner
# 2. (Recommended) create a virtual environment
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS / Linux
# 3. Install dependencies
pip install -r requirements.txt
# 4. Install the Chromium browser for Playwright
playwright install chromiumТолько GUI: настольное приложение использует
tkinter, который поставляется со стандартными установками Python. Дополнительный пакет не требуется. GUI наиболее отполирован на Windows.
Дополнительные инструменты для разработки/тестирования:
pip install -r requirements-dev.txt # pytest, coverage💡 Перед началом: Reelminner лучше всего работает с вошедшей в систему сессией Instagram — некоторые Reels и все данные о владельцах/подписчиках требуют аутентификации. Запустите
python scraper.py --loginодин раз (интерактивный QR) или импортируйте cookie, экспортированные из расширения браузера EditThisCookie, с помощьюpython scraper.py --import-cookies cookies.json. Он читает только публичный контент, который вам уже разрешено просматривать.
🚀 Быстрый старт
# Scrape a single reel from the command line
python scraper.py "https://www.instagram.com/reel/CxXYZ123/"
# …or many reels from a file (one URL per line)
python scraper.py -f urls.txt -o export.csv
# Launch the desktop GUI
python gui.py💻 Использование
1. Настольный GUI
python gui.pyНажмите Login (необязательно, но рекомендуется — повышает успешность).
Вставьте по одному URL рилса в строку в поле (или
Ctrl+A, чтобы выбрать все).Перетащите ползунок Workers, затем нажмите Scrape.
Наблюдайте за результатами в таблице.
Правый клик по строке, чтобы скопировать URL или открыть Reel.
Экспортируйте в CSV / Excel / JSON или Откройте папку с результатами.
Последние результаты автоматически сохраняются в results/_last_results.json.
2. Командная строка (CLI)
python scraper.py [URL ...] [options]Флаг | По умолчанию | Описание |
| — | Один или несколько URL рилсов (позиционные). |
| — | Текстовый файл с одним URL рилса в строке. |
| off | Открыть браузер для интерактивного входа (QR). |
| — | Импортировать JSON-экспорт EditThisCookie. |
| off | Удалить сохранённый |
| off | Запустить браузер без окна. |
|
| Количество параллельных потоков скрапинга. |
|
| Секунды ожидания между запросами. |
|
| Путь для сохранённой сессии. |
|
| Путь для выходного CSV. |
| off | Пропустить автоматическое получение данных о подписчиках владельца. |
# Headless, 5 workers, 1s delay, no profile enrichment
python scraper.py -f reels.txt -w 5 --delay 1 --headless --no-profiles -o out.csv3. MCP-сервер (для ИИ-агентов)
Reelminner включает MCP (Model Context Protocol) сервер, чтобы ИИ-клиент мог управлять им.
python mcp_server.py # stdio transportНастройте ваш MCP-клиент (.mcp.json включён в репозиторий):
{
"mcpServers": {
"reelminner": {
"command": "python",
"args": ["mcp_server.py"],
"cwd": ".",
"env": { "RMIN_HEADLESS": "true" }
}
}
}Доступные инструменты (5, стабильные):
Инструмент | Сигнатура | Назначение |
|
| Запустить задачу скрапинга. |
|
| Текущий прогресс / сводка последних результатов. |
|
| Загрузить куки из файла EditThisCookie. |
|
| Остановить выполняющуюся задачу. |
|
| Экспорт в |
Переопределения окружения: RMIN_HEADLESS, RMIN_WORKERS, RMIN_DELAY, RMIN_WITH_PROFILES.
4. Python API
from scraper import Reelminner, write_csv
scraper = Reelminner(workers=3, delay=2.0, headless=True)
rows, report = scraper.scrape(
["https://www.instagram.com/reel/CxXYZ123/"],
with_profiles=True,
)
write_csv(rows, "out.csv")
for r in rows:
print(r["username"], r["followers"], r["likes"], r["status"])Ключевые члены Reelminner:
scrape(urls, with_profiles=True)→(rows, report)login()— интерактивный входhas_session()/save_cookies_from_file(path)/clear_session()write_csv(rows, path),export_json(rows, path),export_excel(rows, path)normalize_reel_url(url)— публичный помощникcsv_columns— упорядоченный список выходных полейDEFAULT_STATE_FILE— по умолчаниюstorage_state.json
📊 Формат вывода
Каждый рилс становится одной строкой. Полная схема CSV (scraper.csv_columns):
Столбец | Описание |
| Индекс строки. |
| Имя пользователя владельца рилса (например, |
| Количество подписчиков владельца (может быть |
| Отображаемое имя владельца. |
| Текст биографии владельца. |
|
|
| Количество рилсов в профиле владельца. |
| Ссылка на профиль владельца. |
| Канонический URL рилса. |
| Короткий код / ID рилса Instagram. |
| Текст подписи к рилсу. |
| Временная метка поста. |
| Количество воспроизведений / просмотров. |
| Количество лайков. |
| Количество комментариев. |
| Прямой URL видеофайла. |
| URL изображения-миниатюры. |
| Название аудиодорожки. |
| Исполнитель аудио. |
| ID аудио / музыки. |
| Когда была получена эта строка (ISO-метка времени). |
|
|
⚙️ Конфигурация
Куки / сессия
Войдите с помощью
python scraper.py --login(сохраняетstorage_state.json).Или экспортируйте куки из браузера через расширение EditThisCookie и выполните
python scraper.py --import-cookies cookies.json.
Переменные окружения (используются MCP-сервером и значениями по умолчанию CLI)
Переменная | Эффект |
|
|
| Количество рабочих процессов по умолчанию. |
| Задержка между запросами по умолчанию (секунды). |
|
|
Предоставляется шаблон: скопируйте mcp.env.example → mcp.env, чтобы переопределить значения MCP по умолчанию.
🗂️ Структура проекта
reelminner/
├── scraper.py # Core engine: Reelminner + CLI
├── gui.py # Tkinter desktop application
├── parsers.py # Pure extraction helpers (HTML/JSON/music/regex)
├── mcp_server.py # MCP server (5 tools for AI agents)
├── theme.py # Dark‑theme styling for the GUI
├── build_exe.py # PyInstaller build script
├── Reelminner.spec # PyInstaller spec (one‑file EXE)
├── run_qa.py # End‑to‑end QA harness with data‑quality gates
├── requirements.txt # Runtime dependencies
├── requirements-dev.txt# Dev / test dependencies
├── mcp.env.example # MCP env template
├── .mcp.json # MCP client configuration
├── assets/ # Icons (icon.ico)
├── docs/ # SKILL.md, E2E test/fix plan
├── skills/ # Agent skill definition
├── tests/ # pytest suite + corpus.txt
└── results/ # Scrape outputs (git‑ignored)🧪 Тестирование и QA
# Unit / integration tests
pytest -q
# End‑to‑end data‑quality run (uses your saved session)
python run_qa.py # full run over tests/corpus.txt
python run_qa.py --quick # 1 URL, headless, fast iteration
python run_qa.py --url <reel> # custom single URL
python run_qa.py --report-only # show last qa_report.jsonТестовый стенд QA обеспечивает соблюдение порогов, таких как доля успешно обработанных, доля проверенных, доля непустых, доля заблокированных и максимальное время выполнения, и записывает results/qa/qa_report.json + qa_results.csv.
📦 Сборка автономного EXE
В Windows создайте переносимый .exe (конечным пользователям не нужен Python):
pip install pyinstaller
python build_exe.pyРезультат: dist/Reelminner.exe (однофайловая сборка через Reelminner.spec).
⚠️ Правовое и этическое предупреждение
Reelminner предоставляется только для образовательных и авторизованных/личных целей.
Скрапинг Instagram может нарушать его Условия предоставления услуг. Используйте его только на контенте, которым вы владеете или к которому вам разрешён доступ.
Соблюдайте ограничения скорости (
--delay, меньше--workers) и не используйте его для спама, преследования или коммерческого массового извлечения данных.Вы несёте ответственность за то, как вы используете этот инструмент, и за соблюдение применимых законов (включая GDPR / правила конфиденциальности) в вашей юрисдикции.
Авторы не связаны с Instagram/Meta и не несут ответственности.
🆘 Устранение неполадок и FAQ
playwright сообщает, что браузер не установлен / страницы не открываются
→ Убедитесь, что вы выполнили и pip install -r requirements.txt, и
playwright install chromium. Без загрузки Chromium ничего не запустится.
Большинство полей пусты, или я получаю BLOCKED / RATE_LIMITED
→ Войдите (python scraper.py --login) или импортируйте куки, затем снизьте темп:
--delay 4 и меньше рабочих процессов (-w 1). Instagram сильнее всего ограничивает анонимный/неаутентифицированный
трафик, поэтому аутентифицированная сессия — самый важный фактор успеха.
Рилс возвращает NO_DATA
→ Пост может быть приватным, удалённым или ограниченным по региону, или Instagram показал стену входа.
Попробуйте снова с выполненным входом.
Окно GUI не открывается или шрифты выглядят неправильно
→ GUI использует встроенный tkinter Python. В Windows он наиболее отполирован. В Linux/macOS
установите пакет Tk, если окно не запускается (например, sudo apt install python3-tk).
ModuleNotFoundError при запуске скрипта
→ Вероятно, вы находитесь вне репозитория или его виртуального окружения. Перейдите в папку проекта
и активируйте venv (.venv\Scripts\activate в Windows, source .venv/bin/activate
в macOS/Linux) перед запуском python scraper.py.
Как скрапить много рилсов сразу?
→ Поместите по одному URL в строку в текстовый файл и выполните
python scraper.py -f urls.txt -o out.csv.
Может ли ИИ-агент использовать это?
→ Да — запустите python mcp_server.py и укажите любому MCP-клиенту (Claude Desktop, Cursor и т.д.)
на включённый .mcp.json. См. MCP-сервер.
🤝 Вклад в проект
Сделайте форк репозитория и создайте ветку для новой функции.
pip install -r requirements-dev.txtДобавьте/скорректируйте тесты в
tests/; запуститеpytestиpython run_qa.py --quick.Откройте pull request с описанием изменения и результатом QA.
📄 Лицензия
Выпущено под лицензией MIT — см. LICENSE.
🏷️ Название
Финальное публичное название проекта — Reelminner («Reel miner»). Более ранние внутренние кодовые имена были отозваны. Если вы форкнете его, вы можете переименовать его как угодно — просто обновите заголовок в gui.py и этом README.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables LLMs to interact with Instagram through a comprehensive toolkit for account management, content creation, messaging, social graph analysis, and content discovery.11
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Instagram Business accounts by automating content publishing, scheduling posts, and analyzing performance metrics. Supports posts, stories, reels, and carousels with detailed audience insights and hashtag discovery.
- FlicenseBqualityDmaintenanceEnables AI agents to control Instagram accounts programmatically, supporting profile management, media interaction, direct messaging, and follower management.132
- AlicenseAqualityFmaintenanceEnables AI assistants to interact with Instagram by scraping profiles, posts, reels, DMs, and business insights through a robust, DOM-agnostic browser orchestration engine that bypasses Instagram's anti-automation measures.281Apache 2.0
Related MCP Connectors
Instagram for AI agents: publish, read comments and DMs, insights, and engage from your account.
Twitter/X, Instagram, Reddit & TikTok data for AI agents. Billions of posts. No API keys.
Give your agent live data from Twitter, Reddit, the web and GitHub. No API keys, no scraping stack.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ilovekushgola/reelminner'
If you have feedback or need assistance with the MCP directory API, please join our Discord server