reelminner
💡 Nota sobre el nombre: El nombre público final de este proyecto es Reelminner. La clase del motor Python es
Reelminner(verscraper.py), la CLI/GUI y el servidor MCP están marcados comoreelminner, y el repositorio de GitHub esreelminner. El nombre en clave anterior ReelSnipe se ha retirado por completo. Otras ideas de nombre se enumeran en Opciones de nombre.
📚 Tabla de contenidos
Related MCP server: Instagram Complete MCP Server
Qué es Reelminner
Reelminner es un conjunto de herramientas de código abierto que extrae datos estructurados de los Reels de Instagram
y de los perfiles que los publicaron. Está construido alrededor de un único motor reutilizable
(Reelminner) que se expone de cuatro formas diferentes:
Interfaz | Archivo | Ideal para |
🖥️ GUI de escritorio |
| Usuarios no técnicos, scraping con un clic |
⌨️ CLI |
| Usuarios avanzados, trabajos por lotes, scripts |
🤖 Servidor MCP |
| Agentes de IA / flujos de trabajo con LLM |
🐍 API de Python | import | Integración en tu propio código |
Todo comparte la misma lógica de análisis, sesión y límite de velocidad, por lo que los resultados son idénticos sin importar qué interfaz utilices.
✨ Características
Análisis de reels de múltiples fuentes — Reelminner lee datos de varias capas (JSON incrustado, respuestas GraphQL y un respaldo DOM en vivo) para que siga funcionando incluso cuando Instagram cambia una de ellas.
Enriquecimiento del perfil del propietario — para cada reel puede obtener automáticamente el
username,full_name,bio,followers,is_verifiedyreels_countdel autor.Extracción del número de seguidores — obtenido mediante la consulta GraphQL
UserByRestrictedView/GraphQLOwnerInfode Instagram, con respaldo DOM y paginación (maneja cifras de seguidores limitadas como "1.2M" desplazándose por el perfil).Metadatos de música — audio del reel
music_title,music_artistymusic_id.Métricas de interacción —
views,likes,commentsy lavideo_url/thumbnaildirecta.Gestión de sesión e inicio de sesión — QR/inicio de sesión interactivo, importación de cookies desde exportaciones de EditThisCookie y una renovación de sesión de 24 horas para que no tengas que volver a iniciar sesión constantemente.
Scraping concurrente — un grupo de hilos (
--workers, por defecto 3) con retrasos corteses entre solicitudes (--delay, por defecto 2s) y retroceso adaptativo cuando Instagram devuelveBLOCKED/RATE_LIMITED.Seguimiento de estado resistente — cada fila lleva un código
status(OK,PARSED_PARTIAL,FAILED,NO_DATA,BLOCKED,RATE_LIMITED) para que sepas exactamente qué ha tenido éxito.Múltiples formatos de exportación — CSV (por defecto), JSON y Excel (
.xlsxmedianteopenpyxl).Servidor MCP — cinco herramientas estables para que un agente de IA (Claude, Cursor, etc.) pueda hacer scraping, comprobar el estado, importar cookies, detener y exportar.
GUI de escritorio — tema oscuro integrado, cuadro para pegar URL, tabla de resultados en vivo, clic derecho para copiar URL / abrir reel y exportación con un clic.
Probado — suite de pytest + un arnés de control de calidad de extremo a extremo que aplica controles de calidad de datos.
🧠 Cómo funciona
┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐
│ 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 │
└───────────────────────┘Normaliza la URL de entrada (
normalize_reel_url) para que/reel/X/y/reel/s/…/funcionen ambos.Carga la sesión — aplica las cookies guardadas (
sessionid,csrftoken,ds_user_id,ig_did,mid,rur) o inicia sesión.Obtiene y analiza la página del reel con un respaldo en capas:
parse_reel_page→ JSON HTML incrustadowindow.__additionalData/sharedDataparse_reel_json→ respuesta GraphQLGQLsin procesarparse_graphql_reel→ objetoshortcodeMediaRespaldo DOM →
_extract_text_rawconsulta la página en vivo para obtener me gusta / comentarios / reproducciones / seguidores mediante adaptadores de expresiones regulares.
Enriquece el propietario (a menos que se use
--no-profiles): obtiene el perfil y leefollowers,full_name,bio,is_verified,reels_count.Respeta los límites: espera
delayentre solicitudes; si está bloqueado, retrocede y reintenta.Escribe filas en CSV / JSON / Excel con un
statuspor fila.
🏗️ Arquitectura del proyecto
Reelminner es un diseño de motor único, múltiples interfaces. Un motor central
(Reelminner) hace todo el trabajo real; la GUI, la CLI, el servidor MCP y la
API de Python son interfaces ligeras que lo invocan. Esto mantiene el análisis, la gestión
de sesión y el límite de velocidad idénticos en todos los puntos de entrada.
┌─────────────────────────────┐
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 writersResponsabilidades de los módulos
Archivo | Rol | Símbolos públicos clave |
| Motor central + CLI. Gestiona el navegador, la sesión, el grupo de hilos y los escritores. |
|
| Helpers de extracción pura — sin navegador, fáciles de probar unitariamente. |
|
| Aplicación de escritorio Tkinter. Construye la ventana, el menú, el cuadro de URL, el control deslizante de workers, la tabla de resultados y los diálogos de exportación. |
|
| Estilos de la GUI — aplica el tema oscuro a los widgets |
|
| Servidor MCP — expone el motor como 5 herramientas para agentes de IA a través de stdio. |
|
| Empaquetado — compilación de un solo archivo con PyInstaller. |
|
| Arnés de control de calidad — ejecuta el motor sobre un corpus y aplica controles de calidad de datos. |
|
Detalles internos del motor (Reelminner)
Capa de sesión —
_SESSION_COOKIE_NAMES(sessionid,csrftoken,ds_user_id,ig_did,mid,rur);_apply_cookies(),_refresh_if_needed()(24h),login()(QR interactivo),clear_session().Concurrencia —
scrape()inicia unThreadPoolExecutor(max_workers=workers); cada URL es gestionada por_worker→_scrape_url, que llama a_gather_metadata(datos del reel) y opcionalmente a_gather_article(perfil del propietario). Un semáforo +_sleep()garantizan la cortesía;status_code/retcodeimpulsan un bucle adaptativo de reintento/retroceso cuando Instagram devuelveBLOCKED/RATE_LIMITED.Canalización de análisis (respaldo en capas) — dentro de
_gather_metadatael motor intenta, en orden:parse_reel_page(JSON HTML incrustado) →parse_reel_json(GraphQLGQLsin procesar) →parse_graphql_reel(shortcodeMedia) → respaldo DOM mediante los adaptadores_extract_text_html/_extract_text_rawy la lista de expresiones regulares_PATTERNS(me gusta/comentarios/reproducciones/seguidores).Enriquecimiento de perfil —
get_follower_count()utiliza la consulta GraphQLUserByRestrictedView/GraphQLOwnerInfode Instagram, con respaldo al DOM y paginación de seguidores (_fetch_followersconend_cursor) cuando los recuentos están limitados.Salida — las filas se recopilan como diccionarios
ReelDatay se escriben mediantewrite_csv(respetandocsv_columns),export_jsonoexport_excel(necesitaopenpyxl).
Por qué esta estructura
Capacidad de prueba — todo el análisis vive en
parsers.pysin dependencia del navegador, por lo quetests/test_parsers.pypuede hacer afirmaciones sobre fixtures HTML/JSON guardados.Una única fuente de verdad — cada interfaz comparte el mismo
Reelminner, por lo que una corrección en el motor beneficia simultáneamente a la GUI, la CLI y el servidor MCP.Empaquetado seguro — las interfaces ligeras de GUI/CLI significan que el EXE de PyInstaller solo incluye el motor + una UI mínima, manteniendo el binario pequeño.
📦 Instalación
Requisitos: Python 3.10+ y el motor de navegador 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 chromiumSolo GUI: la aplicación de escritorio usa
tkinter, que viene con las instalaciones estándar de Python. No se necesita ningún paquete adicional. La GUI está más pulida en Windows.
Herramientas opcionales de desarrollo/pruebas:
pip install -r requirements-dev.txt # pytest, coverage💡 Antes de empezar: Reelminner funciona mejor con una sesión de Instagram iniciada — algunos reels y todos los datos de propietario/seguidores requieren autenticación. Ejecuta
python scraper.py --loginuna vez (QR interactivo), o importa las cookies exportadas desde la extensión de navegador EditThisCookie conpython scraper.py --import-cookies cookies.json. Solo lee contenido público que ya tienes permitido ver.
🚀 Inicio rápido
# 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💻 Uso
1. GUI de escritorio
python gui.pyHaz clic en Login (opcional pero recomendado: mejora la tasa de éxito).
Pega una URL de reel por línea en el cuadro (o
Ctrl+Apara seleccionar todo).Arrastra el control deslizante de Workers y luego haz clic en Scrape.
Observa los resultados aparecer en la tabla.
Clic derecho en una fila para Copiar URL o Abrir Reel.
Exportar a CSV / Excel / JSON, o Abrir carpeta de resultados.
Los últimos resultados se guardan automáticamente en results/_last_results.json.
2. Línea de comandos (CLI)
python scraper.py [URL ...] [options]Indicador | Valor por defecto | Descripción |
| — | Una o más URLs de reel (posicionales). |
| — | Archivo de texto con una URL de reel por línea. |
| off | Abrir un navegador para iniciar sesión interactivamente (QR). |
| — | Importar una exportación JSON de EditThisCookie. |
| off | Eliminar el |
| off | Ejecutar el navegador sin ventana. |
|
| Número de hilos de scraping concurrentes. |
|
| Segundos de espera entre solicitudes. |
|
| Ruta para la sesión guardada. |
|
| Ruta de salida CSV. |
| off | Omitir la obtención automática de datos de seguidores del propietario. |
# Headless, 5 workers, 1s delay, no profile enrichment
python scraper.py -f reels.txt -w 5 --delay 1 --headless --no-profiles -o out.csv3. Servidor MCP (para agentes de IA)
Reelminner incluye un servidor MCP (Model Context Protocol) para que un cliente de IA pueda manejarlo.
python mcp_server.py # stdio transportConfigura tu cliente MCP (el .mcp.json está incluido en el repositorio):
{
"mcpServers": {
"reelminner": {
"command": "python",
"args": ["mcp_server.py"],
"cwd": ".",
"env": { "RMIN_HEADLESS": "true" }
}
}
}Herramientas expuestas (5, estables):
Herramienta | Firma | Propósito |
|
| Ejecutar un trabajo de scraping. |
|
| Progreso actual / resumen del último resultado. |
|
| Cargar cookies desde un archivo EditThisCookie. |
|
| Detener el trabajo en ejecución. |
|
| Exportar a |
Anulaciones de entorno: RMIN_HEADLESS, RMIN_WORKERS, RMIN_DELAY, RMIN_WITH_PROFILES.
4. API de Python
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"])Miembros clave de Reelminner:
scrape(urls, with_profiles=True)→(rows, report)login()— inicio de sesión interactivohas_session()/save_cookies_from_file(path)/clear_session()write_csv(rows, path),export_json(rows, path),export_excel(rows, path)normalize_reel_url(url)— helper públicocsv_columns— la lista ordenada de campos de salidaDEFAULT_STATE_FILE—storage_state.jsonpor defecto
📊 Formato de salida
Cada reel se convierte en una fila. El esquema CSV completo (scraper.csv_columns):
Columna | Descripción |
| Índice de fila. |
| Nombre de usuario del propietario del reel (p. ej. |
| Número de seguidores del propietario (puede ser |
| Nombre para mostrar del propietario. |
| Texto de la biografía del propietario. |
|
|
| Número de reels en el perfil del propietario. |
| Enlace al perfil del propietario. |
| URL canónica del reel. |
| Código corto / ID del reel de Instagram. |
| Texto del pie de foto del reel. |
| Marca de tiempo de la publicación. |
| Número de reproducciones / vistas. |
| Número de me gusta. |
| Número de comentarios. |
| URL directa del archivo de video. |
| URL de la imagen en miniatura. |
| Título de la pista de audio. |
| Artista del audio. |
| ID de audio / música. |
| Cuándo se raspó esta fila (marca de tiempo ISO). |
|
|
⚙️ Configuración
Cookies / sesión
Inicia sesión con
python scraper.py --login(guardastorage_state.json).O exporta cookies desde tu navegador mediante la extensión EditThisCookie y ejecuta
python scraper.py --import-cookies cookies.json.
Variables de entorno (usadas por el servidor MCP y los valores predeterminados de la CLI)
Variable | Efecto |
|
|
| Número de trabajadores predeterminado. |
| Retraso predeterminado entre solicitudes (segundos). |
|
|
Se proporciona una plantilla: copia mcp.env.example → mcp.env para anular los valores predeterminados de MCP.
🗂️ Estructura del proyecto
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)🧪 Pruebas y control de calidad
# 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.jsonEl entorno de control de calidad aplica umbrales como tasa de análisis, tasa de verificación, tasa de no vacío, tasa de bloqueo y tiempo máximo de ejecución, y escribe results/qa/qa_report.json + qa_results.csv.
📦 Creación de un EXE independiente
En Windows, produce un .exe portátil (los usuarios finales no necesitan Python):
pip install pyinstaller
python build_exe.pySalida: dist/Reelminner.exe (compilación de un solo archivo mediante Reelminner.spec).
⚠️ Aviso legal y ético
Reelminner se proporciona solo para uso educativo y autorizado/personal.
El scraping de Instagram puede violar sus Términos de servicio. Úsalo solo en contenido que poseas o para el que tengas permiso de acceso.
Respeta los límites de tasa (
--delay, menos--workers) y no lo uses para spam, acoso o extracción comercial masiva.Eres responsable de cómo usas esta herramienta y de cumplir con las leyes aplicables (incl. GDPR / normativas de privacidad) en tu jurisdicción.
Los autores no están afiliados a Instagram/Meta y no aceptan responsabilidad alguna.
🆘 Solución de problemas y preguntas frecuentes
playwright dice que el navegador no está instalado / las páginas no se abren
→ Asegúrate de haber ejecutado tanto pip install -r requirements.txt como
playwright install chromium. Sin la descarga de Chromium, nada se iniciará.
La mayoría de los campos están vacíos, o recibo BLOCKED / RATE_LIMITED
→ Inicia sesión (python scraper.py --login) o importa cookies, luego reduce la velocidad:
--delay 4 y menos trabajadores (-w 1). Instagram limita más el tráfico anónimo/no autenticado,
por lo que una sesión autenticada es el factor de éxito más importante.
Un reel devuelve NO_DATA
→ La publicación puede ser privada, eliminada o bloqueada por región, o Instagram mostró un muro de inicio de sesión.
Inténtalo de nuevo con una sesión iniciada.
La ventana de la GUI no se abre o las fuentes se ven mal
→ La GUI usa el tkinter integrado de Python. En Windows es la más pulida. En Linux/macOS
instala el paquete Tk si la ventana no se inicia (p. ej. sudo apt install python3-tk).
ModuleNotFoundError al ejecutar un script
→ Probablemente estás fuera del repositorio o de su entorno virtual. cd a la carpeta del proyecto
y activa el venv (.venv\Scripts\activate en Windows, source .venv/bin/activate
en macOS/Linux) antes de ejecutar python scraper.py.
¿Cómo raspo muchos reels a la vez?
→ Pon una URL por línea en un archivo de texto y ejecuta
python scraper.py -f urls.txt -o out.csv.
¿Puede un agente de IA usar esto?
→ Sí: ejecuta python mcp_server.py y apunta cualquier cliente MCP (Claude Desktop, Cursor, etc.)
al .mcp.json incluido. Consulta Servidor MCP.
🤝 Contribuciones
Haz un fork del repositorio y crea una rama de características.
pip install -r requirements-dev.txtAñade/ajusta pruebas en
tests/; ejecutapytestypython run_qa.py --quick.Abre una solicitud de extracción (pull request) describiendo el cambio y el resultado del control de calidad.
📄 Licencia
Publicado bajo la Licencia MIT — consulta LICENSE.
🏷️ Nombre
El nombre público final del proyecto es Reelminner ("Reel miner"). Los nombres en clave internos anteriores
se han retirado. Si haces un fork, puedes renombrarlo como quieras:
solo actualiza el título en gui.py y este 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