
socid-extractor v0.1.1
⛏️ Maigret背后的提取引擎:将任何个人资料URL转换为结构化的OSINT记录,覆盖150多个网站
socid_extractor
将任意公开个人资料页面转换为结构化的账户记录——用户名、显示名称、个人简介、头像、位置、注册日期、粉丝数、外部链接,以及稳定内部标识符,这些标识符能在账户改名、改版和删除后依然唯一锁定该账户。
socid_extractor 解析来自 130+ 平台的 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
支持的站点
非穷举示例:
- 主要网络: Facebook(用户和群组页面)、Instagram、VK.com、OK.ru、Reddit、TikTok、Bluesky、Tumblr、Flickr
- Google 生态: Google 文档/地图贡献(需 cookie)、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;解析逻辑请参见 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]
- 私有解析器插件——在公开的 150+ 站点基础上增加 100+ 额外检查,随平台变化而更新(与公开开源数据库分开维护)
- 提取 API——将
socid_extractor集成到你的产品中
SOWEL 分类
对应于以下 SOWEL 技术:
使用 socid_extractor 的工具
- Maigret —— 强大的用户名检测器,能从 3000+ 站点找到的账户中生成包含所有可用信息的报告。
- TheScrapper —— 从网站抓取电子邮件、电话号码和社交媒体账户。
- InfoHunter —— 开源 OSINT 工具,用于在线搜索、收集和分析信息。
- YaSeeker —— 通过登录名/邮箱收集关于 Yandex 账户的所有可用信息。
- Marple —— 针对给定用户名抓取搜索引擎结果。
测试
从 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。还需要包含内联 fixture 的单元测试(tests/test_socid_improvements.py),但这不替代 e2e 覆盖。详情请参阅 docs/testing-and-ci.md。
开发者文档(架构、模块、CI)位于 docs/。
贡献
如果你想添加新方案或修复任何问题,请参阅贡献指南。