code-root/tiktok-deep-scraper

GitHub: code-root/tiktok-deep-scraper

一个纯API的TikTok深度抓取工具,通过逆向Web API请求签名实现无浏览器爬取,能从账号简介中提取电话号码、推断国家地区并自动分类商业类型。

Stars: 0 | Forks: 0

# TikTok 深度简介抓取工具 **English** · [العربية](README.ar.md) 一个纯 API(无浏览器,无 Selenium)工具,可深度抓取 TikTok 以发现账号并从其简介中提取**电话号码**,然后通过概率分布猜测每个号码的**国家/地区**。 它的工作原理是手动对 TikTok web-API 请求进行签名,并使用带有浏览器模拟功能的 [`curl_cffi`](https://github.com/lexiforest/curl_cffi) 来绕过 Akamai 的 TLS 指纹识别。 ## 功能 - **纯 API** — 无需浏览器自动化;直接发送签名的 HTTP 请求。 - **深度、持续抓取** — 对关注者图谱进行广度优先搜索(BFS):一个账号 → 其关注者 → 他们的关注者 → ……直到可配置的深度。边界会自动扩展,因此搜索会持续进行并自动加深。 - **关键词 / 标签种子** — 通过搜索关键词发现账号。 - **电话号码提取** — 支持阿拉伯语/波斯语和拉丁数字、WhatsApp 链接以及常见的分隔符。 - **带有概率的国家/地区检测** — 使用数字结构加上简介信号(旗帜、城市/国家名称、区号)的混合算法。 - **自动商业类型分类** — 使用加权关键词算法从其简介中对每个账号进行分类(房地产、汽车、餐厅、外卖、营销、医疗等),并随着号码的收集自动完成计算。 - **持久化状态** — 已经抓取过的用户将被记录并在未来的运行中跳过(无需重新抓取)。 - **增量、去重的 JSON 输出。** ## 工作原理 请求按照 TikTok 的 `webmssdk` 方式在客户端进行签名: | 签名 | 来源 | | ------------- | ---------------------------------------- | | `X-Gnarly` | 在 `gnarly.py` 中计算(基于 ChaCha) | | `X-Bogus` | `1`(一个静态占位符即可满足) | | `msToken` | 随机的 128 字符串 | | `X-Dynosaur` | 从浏览器中捕获的可重用 token,存储在 `config.json` 中(仅用于搜索) | 使用的 endpoint: - 用户搜索:`/api/search/user/full/`(需要 `X-Dynosaur`) - 关注者列表:`/api/user/list/?scene=67`(无需 `X-Dynosaur`) 由于 TLS/JA3 指纹识别,普通的 `requests` 会被拦截(返回空响应体);而带有 `impersonate` 的 `curl_cffi` 可以解决此问题。 ## 安装 ``` python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## 配置 复制示例配置并填入你自己的值: ``` cp config.example.json config.json ``` 编辑 `config.json`: - **`cookie`** — 来自你浏览器的完整登录 cookie 字符串。它**必须**包含 `sessionid=...`(获取关注者列表需要登录)。 - **`x_dynosaur`** — 从浏览器 Network(网络)选项卡中的搜索请求捕获的 token。它可在不同查询中重复使用;如果搜索开始返回空响应,请刷新它。 - **`impersonate`** — `curl_cffi` 浏览器配置文件(默认为 `firefox133`)。 - 其他可调参数:`max_followers_per_user`、`max_depth`、`max_users`、`delay_min`/`delay_max`、`keywords`、`output`、`state`。 ### 如何捕获 `cookie` 和 `x_dynosaur` 1. 在你的浏览器中登录 `tiktok.com`。 2. 打开 DevTools → Network(网络),然后执行一次**用户搜索**。 3. 打开对 `/api/search/user/full/` 的请求: - 复制完整的 `Cookie` 请求标头 → `cookie`。 - 复制 `X-Dynosaur` 查询参数 → `x_dynosaur`。 ## 用法 ### 1) 单账号关注者扫描 (`search_bio.py`) ``` python3 search_bio.py coderoot.ksa python3 search_bio.py user1 user2 --max-followers 1000 python3 search_bio.py someuser --no-seed ``` ### 2) 深度持续抓取爬虫 (`deep_search.py`) ``` # 从 keywords / hashtags python3 deep_search.py --keywords "مطعم" "عقارات" "توصيل" --max-depth 6 # 从 seed accounts python3 deep_search.py --seeds coderoot.ksa --max-depth 6 --max-followers 800 # 更大的 limits python3 deep_search.py --keywords "متجر" --max-users 200000 --max-depth 6 ``` | 选项 | 描述 | 默认值 | | ------------------ | --------------------------------------------- | ------------------ | | `--keywords` | 开始抓取所用的搜索关键词/标签 | 来自配置 | | `--seeds` | 开始抓取所用的种子用户名 | — | | `--max-depth` | 关注者树中的展开深度 | 4 | | `--max-followers` | 每个账号最多获取的关注者数 | 1000 | | `--max-users` | 最多处理的账号数(安全上限) | 1000000 | | `--state` | 已经抓取过的用户的状态文件 | `output/crawl_state.json` | | `--reset-state` | 忽略状态并重新开始 | 关闭 | | `--delay-min/max` | 请求之间的随机延迟(秒) | 0.3 / 1.0 | - 只要边界不为空,就会**持续**运行并不断加深。 - 随时可以通过 **Ctrl+C** 停止;进度和状态会被保存。 - 私密账号不会被展开(其关注者列表不公开)。 ### 3) 丰富现有文件 (`enrich_country.py`, `enrich_categories.py`) ``` python3 enrich_country.py # add/refresh country info python3 enrich_categories.py # add/refresh business-type category python3 enrich_country.py path/to/file.json ``` ## 输出格式 结果会保存到 `output/tiktok-bio.json`(一个去重的 JSON 数组): ``` { "name": "Restaurant Mawazin Dubai", "username": "bouchtadubai", "phone": "0547166686", "country": "United Arab Emirates", "country_ar": "الإمارات", "country_iso": "AE", "dial_code": "+971", "country_confidence": 0.636, "country_probs": { "AE": 0.636, "SA": 0.364 }, "category": "Restaurants & Food", "category_ar": "مطاعم وأطعمة", "category_confidence": 1.0, "category_tags": ["restaurant"], "bio": "... Deira Dubai ...", "source": "search:مطعم" } ``` `source` 是 `search:`、`seed:@` 或 `follower_of:@` 中的一种。 ## 国家/地区检测算法 1. **明确的国家代码**(开头包含 `+` / `00` / 已知代码) → 高置信度。 2. **本地格式** — 国家手机前缀: - `01[0125]`(11 位数字) → 埃及。 - `05x`(10 位数字) → 沙特阿拉伯 / 阿联酋,通过前缀区分 (`053/057/059` = 沙特,`052` = 阿联酋,`050/054/055/056/058` = 共享)。 - `920 / 800` → 沙特统一/免费号码。 - 不以 0 开头的 8 位数字 → 海湾地区 8 位编号。 3. **简介信号** — 旗帜表情符号(🇸🇦🇦🇪🇪🇬…)、城市/国家名称以及文本中注明的区号会提升匹配候选对象的得分。 得分会被标准化为概率分布(`country_probs`),以 ISO 代码作为键,得分最高的候选者将成为 `country`/`country_confidence`。 ## 商业类型分类 每个账号都会使用基于简介和名称的加权关键词列表,被分类到约 17 个类别(房地产、汽车、外卖、营销、餐厅、服装、美容、医疗、教育、清洁、家具、承包、印刷、科技、金融、旅游、商店)之一。得分会被标准化为概率分布;得分最高的类别将成为带有 `category_confidence` 的 `category`/`category_ar`,并且 `category_tags` 会列出前 3 个类别键。没有明确商业信号的账号将不予分类(`null`),而不是被强行归类。 ## 项目结构 ``` . ├── search_bio.py # single-account follower scan (pure API) ├── deep_search.py # deep continuous BFS crawler ├── country.py # phone -> country probability algorithm ├── categories.py # bio -> business-type classification ├── phones.py # phone-number extraction from bio text ├── enrich_country.py # add country info to an existing results file ├── enrich_categories.py # add category info to an existing results file ├── gnarly.py # X-Gnarly request-signature generator ├── config.example.json # config template (copy to config.json) ├── requirements.txt └── output/ # results & state (git-ignored) ``` ## 关于 Storage TE 本项目由 **[Storage TE](https://storage-te.com/)** 构建和维护 — 这是一家专注于**逆向工程**、自动化、增长工具、定制编程和 AI 的软件公司。我们构建 Web/移动应用、管理后台、数据提取和潜在客户生成 pipeline(例如 Google 地图和社交媒体潜在客户)、签名/反机器人研究,以及面向社交媒体的数字增长平台。 在 **[storage-te.com](https://storage-te.com/)** 了解更多。 ## 维护者、公司与联系方式 👤 | | | | --------- | ---------------------------------------- | | 开发者 | Mostafa Al-Bagouri | | 公司 | [Storage TE](https://storage-te.com/) | | WhatsApp | +20 100 199 5914 | | 电子邮件 | info@storage-te.com | ### 收款二维码(在 Binance 或任何 BSC 钱包中扫描) | USDT · BSC | BTC · BSC | | :--------: | :-------: | | ![USDT deposit QR - BSC](https://static.pigsec.cn/wp-content/uploads/repos/cas/27/27caf366ce494af3634dbbf018bd0d8a050b35cf062086cf6844a41686854f5b.png) | ![BTC on BSC deposit QR](https://static.pigsec.cn/wp-content/uploads/repos/cas/27/27caf366ce494af3634dbbf018bd0d8a050b35cf062086cf6844a41686854f5b.png) | 这两个二维码编码的是上方相同的 BSC (BEP-20) 地址。 阿拉伯语文档:**[README.ar.md](README.ar.md)** ## 关键词 `tiktok` · `tiktok-api` · `tiktok-scraper` · `web-scraping` · `crawler` · `osint` · `lead-generation` · `phone-numbers` · `data-extraction` · `reverse-engineering` · `x-gnarly` · `x-bogus` · `msToken` · `curl-cffi` · `tls-fingerprinting` · `country-detection` · `business-classification` · `followers` · `bio-scraper` · `arabic` · `python` · `automation` · `storage-te` ## 免责声明 仅供研究和教育使用;请遵守 TikTok 的服务条款及所有适用法律。 ## 许可证 [MIT](LICENSE)
标签:逆向工具