
⛏️ El motor de extracción detrás de Maigret: convierte cualquier URL de perfil en un registro OSINT estructurado en más de 150 sitios
Convierte cualquier página de perfil público en un registro estructurado de cuenta: nombres de usuario, nombres mostrados, biografías, avatares, ubicaciones, fechas de registro, recuentos de seguidores, enlaces externos y los identificadores internos estables que identifican de forma única una cuenta a través de cambios de nombre, rediseños y eliminaciones.
socid_extractor analiza páginas HTML y respuestas de API de más de 130 plataformas y devuelve un diccionario plano y legible por máquina con los campos de la cuenta. No se necesitan claves de API, ni navegador sin cabeza: solo una llamada a una función sobre el texto de la respuesta.
Por qué es útil
extract() para Instagram, GitHub, VK, Reddit, Substack, Bluesky, TikTok: sin código de adaptación por plataforma de tu parte.username, fullname, created_at, is_verified, …) para que los pipelines posteriores no necesiten 130 mapeos.Python: 3.10+.
pip install socid-extractor
Para una instalación CLI limpia en una estación de trabajo:
pipx install socid-extractor
La última versión de desarrollo:
pip install -U git+https://github.com/soxoj/socid-extractor.git
Como CLI:
$ socid_extractor --url https://www.deviantart.com/muse1908
country: France
created_at: 2005-06-16 18:17:41
gender: female
username: Muse1908
website: www.patreon.com/musemercier
links: ['https://www.facebook.com/musemercier', 'https://www.instagram.com/muse.mercier/', 'https://www.patreon.com/musemercier']
tagline: Nothing worth having is easy...
Como biblioteca de Python:
import requests
import socid_extractor
r = requests.get('https://www.patreon.com/annetlovart')
print(socid_extractor.extract(r.text))
# {'patreon_id': '33913189', 'patreon_username': 'annetlovart',
# 'fullname': 'Annet Lovart',
# 'links': "['https://www.facebook.com/322598031832479', ...]"}
Consejo — ejecuciones por lotes: pasa --skip-fetch-if-no-url-hint para saltar la petición HTTP cuando la URL no coincida con ninguna pista de sitio conocida (más rápido, pero puede omitir motores genéricos como plantillas de foros):
$ socid_extractor --url https://example.com/foo --skip-fetch-if-no-url-hint
Más de 130 esquemas — consulta METHODS.md para la lista completa.
Una muestra no exhaustiva:
…y muchos otros.
Para ejemplos de datos, consulta tests/test_e2e.py; para la lógica de análisis, consulta socid_extractor/schemes.py; para la ontología de campos, consulta FIELDS.md.
El socid_extractor de código abierto tiene licencia MIT y es gratuito para uso comercial sin restricciones — pero los analizadores de páginas se rompen con el tiempo a medida que las plataformas cambian su HTML y APIs, y necesitan mantenimiento activo.
Para uso comercial serio — con un paquete de plugins privado mantenido con analizadores adicionales o una API de extracción alojada — contacta: 📧 [email protected]
socid_extractor en tu productoCorresponde a las siguientes técnicas SOWEL:
Instala los extras de prueba de pyproject.toml y luego ejecuta pytest:
pip install '.[test]' # pytest, pytest-rerunfailures, pytest-xdist
python3 -m pytest tests/test_e2e.py -n 10 -k 'not cookies' -m 'not github_failed and not rate_limited'
Usa pip install '.[dev]' en su lugar si también deseas flake8 / mypy / black (el conjunto completo usado por CI).
Cada nuevo esquema debe tener una prueba e2e en tests/test_e2e.py que acceda a una URL/API real. También se requieren pruebas unitarias con fixtures en línea (tests/test_socid_improvements.py) pero no reemplazan la cobertura e2e. Consulta docs/testing-and-ci.md para más detalles.
La documentación para desarrolladores (arquitectura, módulos, CI) se encuentra en docs/.
Consulta la guía de contribución si deseas añadir un nuevo esquema o corregir algo.