
⛏️ Le moteur d'extraction derrière Maigret : transforme toute URL de profil en un enregistrement OSINT structuré sur plus de 150 sites
Transformez n'importe quelle page de profil public en un enregistrement structuré de compte — noms d'utilisateur, noms affichés, biographies, avatars, localisations, dates d'inscription, nombre d'abonnés, liens externes et les identifiants internes stables qui identifient de manière unique un compte malgré les changements de nom, les refontes et les suppressions.
socid_extractor analyse les pages HTML et les réponses API de 130+ plateformes et retourne un dictionnaire plat, lisible par machine, des champs du compte. Aucune clé API requise, aucun navigateur sans tête — juste un appel de fonction unique sur le texte de la réponse.
Pourquoi c'est utile
extract() pour Instagram, GitHub, VK, Reddit, Substack, Bluesky, TikTok — pas de code de liaison par plateforme de votre côté.username, fullname, created_at, is_verified, …) pour que les pipelines en aval n'aient pas besoin de 130 correspondances.Python : 3.10+.
pip install socid-extractor
Pour une installation CLI propre sur un poste de travail :
pipx install socid-extractor
La dernière version de développement :
pip install -U git+https://github.com/soxoj/socid-extractor.git
En tant que 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...
En tant que bibliothèque 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', ...]"}
Astuce — exécutions par lots : passez --skip-fetch-if-no-url-hint pour ignorer la requête HTTP lorsque l'URL ne correspond à aucun indice de site connu (plus rapide, mais peut ignorer les moteurs génériques comme les modèles de forum) :
$ socid_extractor --url https://example.com/foo --skip-fetch-if-no-url-hint
130+ schémas — voir METHODS.md pour la liste complète.
Un échantillon non exhaustif :
…et bien d'autres.
Pour des exemples de données, voir tests/test_e2e.py ; pour la logique d'analyse, voir socid_extractor/schemes.py ; pour l'ontologie des champs, voir FIELDS.md.
Le socid_extractor open-source est sous licence MIT et gratuit pour une utilisation commerciale sans restriction — mais les analyseurs de pages se cassent avec le temps à mesure que les plateformes modifient leur HTML et leurs API, et ils nécessitent une maintenance active.
Pour une utilisation commerciale sérieuse — avec un pack de plugins privé maintenu d'analyseurs supplémentaires ou une API d'extraction hébergée — contactez-nous : 📧 [email protected]
socid_extractor dans votre produitCorrespond aux techniques SOWEL suivantes :
Installez les extras de test depuis pyproject.toml, puis exécutez 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'
Utilisez pip install '.[dev]' à la place si vous voulez aussi flake8 / mypy / black (l'ensemble complet utilisé par CI).
Chaque nouveau schéma doit avoir un test e2e dans tests/test_e2e.py qui interroge une URL/API réelle. Les tests unitaires avec des fixtures en ligne (tests/test_socid_improvements.py) sont également requis mais ne remplacent pas la couverture e2e. Voir docs/testing-and-ci.md pour les détails.
La documentation développeur (architecture, modules, CI) se trouve dans docs/.
Voir le guide de contribution si vous souhaitez ajouter un nouveau schéma ou corriger quelque chose.