
socid-extractor v0.1.1
⛏️ Maigret背后的提取引擎:将任何个人资料URL转换为结构化的OSINT记录,覆盖150多个网站
socid_extractor
将任意公开个人资料页面转换为结构化的账户记录——用户名、显示名称、简介、头像、位置、注册日期、关注者数量、外部链接,以及那些在账户改名、改版和删除后仍能唯一锁定账户的稳定内部标识符。
socid_extractor 可解析来自 250 多种方案的 HTML 页面和 API 响应,并返回一个扁平、机器可读的账户字段字典。无需 API 密钥,无需无头浏览器——只需对响应文本调用一个函数即可。
它的用处
- 跨服务的稳定 ID。 获取 GAIA ID(Google)、Facebook UID、Yandex Public ID、Instagram pk 以及数十种其他标识符——这些值在用户名更改后依然存在,让你能够跨泄露数据、存档和搜索引擎索引关联账户。
- 统一的接口。 对 Instagram、GitHub、VK、Reddit、Substack、Bluesky、TikTok 使用相同的
extract()调用——你这边无需为每个平台编写胶水代码。 - 字段本体。 跨平台的规范化字段名(
username、fullname、created_at、is_verified等),因此下游流水线无需 130 个映射。 - 久经考验。 为 Maigret 及其他多个 OSINT 工具提供支持。
安装
Python:3.10+。
pip install socid-extractor
在工作站上进行干净的 CLI 安装:
pipx install socid-extractor
最新开发版本:
pip install -U git+https://github.com/soxoj/socid-extractor.git
快速开始
作为 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...
作为 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,当 URL 不匹配任何已知站点提示时跳过 HTTP 请求(速度更快,但可能会跳过论坛模板等通用引擎):
$ socid_extractor --url https://example.com/foo --skip-fetch-if-no-url-hint
支持的站点
250+ 种方案,覆盖 Maigret 所检查站点中约 2,000 个——完整列表见 METHODS.md。
以下为部分示例(非完整列表):
- 主流网络: Facebook(用户页与群组页)、Instagram、VK.com、OK.ru、Reddit、TikTok、Bluesky、Tumblr、Flickr
- Google 生态: Google 文档/地图贡献(需要 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 wiki、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;解析逻辑见 socid_extractor/schemes.py;字段本体见 FIELDS.md。
使用场景
- 从单个个人资料出发,挖掘所有可见信息。 一次调用即可返回可见信息,以及平台在后台使用的隐藏内部 ID。延伸阅读:Week in OSINT — Getting a grasp on Google IDs。
- 跨改名、改版和删除追踪账号。 稳定 ID(GAIA、FB UID、Yandex Public ID、Instagram pk 等)让你即使所有可见字段都已改变,也能重新识别同一个人。延伸阅读:Aware Online — User IDs in social-media investigations。
- 按跨服务 UID 搜索。 一旦获得稳定标识符,你就可以转向:
- SQL / 泄露数据库(论坛导出、泄露数据),其中 UID 是连接键,
- 捕获了包含该 UID 的 URL 的 Google / Yandex / archive.org 索引。
- 为下游 OSINT 工具提供数据。 规范化记录比逐站点爬虫更容易被摄取——Maigret 及类似工具用它进行信息丰富化。
商业使用
开源版 socid_extractor 采用 MIT 许可证,可无限制免费用于商业用途——但页面解析器会随着平台更改其 HTML 和 API 而随时间失效,需要积极维护。
如需严肃的商业使用——托管式提取 API,或维护你的产品所依赖的解析器——请联系:📧 [email protected]
- 提取 API——将
socid_extractor集成到你的产品中
SOWEL 分类
对应以下 SOWEL 技术:
使用 socid_extractor 的工具
- Maigret — 强大的用户名检查工具,可生成包含在 3000+ 站点上找到的账号所有可用信息的报告。
- TheScrapper — 从网站抓取电子邮件、电话号码和社交媒体账号。
- InfoHunter — 开源 OSINT 工具,用于在线搜索、收集和分析信息。
- YaSeeker — 通过登录名/电子邮件收集关于 Yandex 账号的所有可用信息。
- Marple — 针对给定用户名抓取搜索引擎结果。
另见
- ShareTrace — 本项目的镜像对应工具:
socid_extractor读取个人资料页面,而 ShareTrace 接收分享链接(TikTok、Instagram、ChatGPT、Discord、Telegram 等),并还原出创建或转发该链接的人,部分分享令牌可离线解码。若只想试用,无需安装任何东西:可使用社区运营的 Telegram 机器人 或 Web UI。
测试
从 pyproject.toml 安装测试附加依赖,然后运行 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'
如果你还想要 flake8 / mypy / black(CI 使用的完整集合),请改用 pip install '.[dev]'。
每个新方案都必须在 tests/test_e2e.py 中有一个 e2e 测试,访问真实的 URL/API。使用内联夹具的单元测试(tests/test_socid_improvements.py)也是必需的,但不能替代 e2e 覆盖。详情请参阅 docs/testing-and-ci.md。
开发者文档(架构、模块、CI)位于 docs/。
贡献
如果你想添加新方案或修复任何问题,请参阅贡献指南。