
⛏️ Движок извлечения данных, лежащий в основе Maigret: превратите любой URL профиля в структурированную OSINT-запись для более чем 150 сайтов
# socid_extractor
[](https://pypi.org/project/socid-extractor/)
[](https://pepy.tech/project/socid-extractor)
[](https://pepy.tech/project/socid-extractor)
[](https://github.com/soxoj/socid-extractor/blob/master/LICENSE)
[](https://github.com/soxoj/socid-extractor/actions/workflows/python-package.yml)
[](https://github.com/soxoj/socid-extractor/stargazers)
[](https://github.com/soxoj/socid-extractor/network/members)
> Превратите любую публичную страницу профиля в структурированную запись аккаунта — имена пользователей, отображаемые имена, биографии, аватары, местоположения, даты регистрации, количество подписчиков, внешние ссылки и **стабильные внутренние идентификаторы**, которые однозначно закрепляют аккаунт при смене имени, редизайне и удалении.
`socid_extractor` разбирает HTML-страницы и ответы API из более чем 250 схем и возвращает плоский машиночитаемый словарь полей аккаунта. API-ключи не требуются, headless-браузер не нужен — достаточно одного вызова функции на тексте ответа.
**Почему это полезно**
- **Стабильные межсервисные ID.** Получайте GAIA ID (Google), Facebook UID, Yandex Public ID, Instagram pk и десятки других — значения, которые переживают смену имени пользователя и позволяют сопоставлять аккаунты по утечкам, архивам и индексам поисковых систем.
- **Единый интерфейс.** Один и тот же вызов `extract()` для Instagram, GitHub, VK, Reddit, Substack, Bluesky, TikTok — никакого платформенного кода-обвязки на вашей стороне.
- **Онтология полей.** [Нормализованные имена полей](https://github.com/soxoj/socid-extractor/blob/master/FIELDS.md) для всех платформ (`username`, `fullname`, `created_at`, `is_verified`, …), так что последующим пайплайнам не нужны 130 маппингов.
- **Проверено на практике.** Лежит в основе [Maigret](https://github.com/soxoj/maigret) и ряда других OSINT-инструментов.
## Установка
Python: 3.10+.
```sh
pip install socid-extractor
```
Для чистой установки CLI на рабочей станции:
```sh
pipx install socid-extractor
```
Последняя версия для разработки:
```sh
pip install -U git+https://github.com/soxoj/socid-extractor.git
```
## Быстрый старт
**Как CLI:**
```sh
$ 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...
```
**Как библиотека Python:**
```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', ...]"}
```
**Совет — пакетные запуски:** передайте `--skip-fetch-if-no-url-hint`, чтобы пропустить HTTP-запрос, когда URL не соответствует ни одному известному подсказке сайта (быстрее, но может пропустить универсальные движки, такие как шаблоны форумов):
```sh
$ socid_extractor --url https://example.com/foo --skip-fetch-if-no-url-hint
```
## Поддерживаемые сайты
[**Более 250 схем**, охватывающих примерно 2 000 сайтов, которые проверяет Maigret — полный список см. в METHODS.md.](https://github.com/soxoj/socid-extractor/blob/master/METHODS.md)
Неполный список примеров:
- **Крупные сети:** Facebook (страницы пользователей и групп), Instagram, VK.com, OK.ru, Reddit, TikTok, Bluesky, Tumblr, Flickr
- **Экосистема Google:** вклад в Google docs/maps (требуются cookies), Google Play, YouTube
- **Mail.ru:** главная страница пользователя my.mail.ru, фото, видео
- **Платформы для разработки и письма:** GitHub, Stack Overflow (HTML + API), LeetCode, Hashnode, Medium, Substack, Paragraph, WordPress.org, Virgool
- **Форумы (универсальные детекторы):** Discourse, MediaWiki / вики Fandom, Mastodon
- **Нишевые / вертикальные:** Chess.com, Roblox, MyAnimeList, Scratch, Wikipedia, DailyMotion, SlideShare, Weebly, Calendly, Amazon Author, Boosty, Warpcast (Farcaster), Fragment (TON/Telegram), Rarible, CSSBattle, lnk.bio, Spatial, TwitchTracker, Max (max.ru)
…и многие другие.
Примеры данных см. в [`tests/test_e2e.py`](https://github.com/soxoj/socid-extractor/blob/master/tests/test_e2e.py); логику парсинга см. в [`socid_extractor/schemes.py`](https://github.com/soxoj/socid-extractor/blob/master/socid_extractor/schemes.py); онтологию полей см. в [FIELDS.md](https://github.com/soxoj/socid-extractor/blob/master/FIELDS.md).
## Сценарии использования
- **Переход от профиля ко всему, что можно увидеть.** Один вызов возвращает видимую информацию плюс скрытые внутренние ID, которые платформа использует за кулисами. Для ознакомления: [Week in OSINT — Getting a grasp on Google IDs](https://medium.com/week-in-osint/getting-a-grasp-on-googleids-77a8ab707e43).
- **Отслеживание аккаунтов через переименования, редизайны и удаления.** Стабильные ID (GAIA, FB UID, Yandex Public ID, Instagram pk, …) позволяют повторно идентифицировать одного и того же человека, даже когда все видимые поля изменились. Для ознакомления: [Aware Online — User IDs in social-media investigations](https://www.aware-online.com/en/importance-of-user-ids-in-social-media-investigations/).
- **Поиск по UID между сервисами.** Получив стабильный идентификатор, можно перейти к:
- SQL / утёкшим базам данных (дампы форумов, данные утечек), где UID является ключом соединения,
- индексам Google / Yandex / archive.org, в которых сохранены URL, содержащие UID.
- **Питание нижестоящих OSINT-инструментов.** Нормализованную запись гораздо проще принимать, чем отдельные скраперы для каждого сайта — её используют [Maigret](https://github.com/soxoj/maigret) и аналогичные инструменты для обогащения.
## Коммерческое использование
Открытый `socid_extractor` распространяется по лицензии MIT и бесплатен для коммерческого использования без ограничений — но парсеры страниц со временем ломаются, поскольку платформы меняют свой HTML и API, и требуют активного сопровождения.
Для серьёзного коммерческого использования — размещённого API извлечения или сопровождения парсеров, от которых зависит ваш продукт — свяжитесь с нами: 📧 [email protected]
- API извлечения — интегрируйте `socid_extractor` в свой продукт
## Классификация SOWEL
Соответствует следующим техникам [SOWEL](https://sowel.soxoj.com/):
- [SOTL-1.4. Analyze Internal Identifiers](https://sowel.soxoj.com/internal-identifiers)
- [SOTL-11.1. Check Outdated And Unused Functionality](https://sowel.soxoj.com/outdated-unused-functionality)
## Инструменты, использующие socid_extractor
- [**Maigret**](https://github.com/soxoj/maigret) — мощный namechecker, который формирует отчёт со всей доступной информацией из аккаунтов, найденных на более чем 3000 сайтах.
- [**TheScrapper**](https://github.com/champmq/TheScrapper) — собирает электронные письма, номера телефонов и аккаунты в социальных сетях с веб-сайта.
- [**InfoHunter**](https://github.com/sweetnight19/InfoHunter) — открытый OSINT-инструмент для поиска, сбора и анализа информации в интернете.
- [**YaSeeker**](https://github.com/HowToFind-bot/YaSeeker) — собирает всю доступную информацию об аккаунте Yandex по логину/email.
- [**Marple**](https://github.com/soxoj/marple) — собирает результаты поисковых систем по заданному имени пользователя.
## См. также
- [**ShareTrace**](https://github.com/soxoj/sharetrace) — зеркальное отражение этого проекта: `socid_extractor` читает страницу профиля, а ShareTrace берёт *ссылку для общего доступа* (TikTok, Instagram, ChatGPT, Discord, Telegram и другие) и восстанавливает, кто её создал или переслал, декодируя некоторые токены общего доступа офлайн. Ничего не нужно устанавливать, если вы просто хотите попробовать: [Telegram-бот](https://t.me/sharetrace_bot?start=c29jaWQtZXh0cmFjdG9yOnJlYWRtZQ), поддерживаемый сообществом, или [веб-интерфейс](https://share.whopostedwhat.com/).
## Тестирование
Установите дополнительные зависимости для тестирования из [`pyproject.toml`](https://github.com/soxoj/socid-extractor/blob/master/pyproject.toml), затем запустите pytest:
```sh
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'
```
Используйте `pip install '.[dev]'`, если вам также нужны flake8 / mypy / black (полный набор, используемый в CI).
**Каждая новая схема должна иметь e2e-тест** в `tests/test_e2e.py`, обращающийся к реальному URL/API. Также требуются модульные тесты с встроенными фикстурами (`tests/test_socid_improvements.py`), но они не заменяют e2e-покрытие. Подробности см. в [docs/testing-and-ci.md](https://github.com/soxoj/socid-extractor/blob/master/docs/testing-and-ci.md).
Документация для разработчиков (архитектура, модули, CI) находится в [docs/](https://github.com/soxoj/socid-extractor/blob/master/docs).
## Участие в разработке
См. [руководство по участию](https://github.com/soxoj/socid-extractor/blob/master/CONTRIBUTING.md), если вы хотите добавить новую схему или что-то исправить.