Massii-08/hidden-api-extraction-template

GitHub: Massii-08/hidden-api-extraction-template

一个 Python 网页数据抓取模板,通过直接调用网站内部 JSON API 替代 HTML 解析,实现更快、更稳定的数据提取。

Stars: 1 | Forks: 0

# Hidden API 提取模板 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/896fe46bef194623.svg)](https://github.com/Massii-08/hidden-api-extraction-template/actions/workflows/ci.yml) [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-blue)](https://www.python.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-green)](LICENSE) ## 核心洞察 大多数动态网站不会将数据直接放在 HTML 中。页面首先会加载一个外壳, 然后在后台通过 **内部 JSON API** 获取真实数据 (例如无限滚动、“加载更多”、实时过滤)。如果你直接读取该 JSON endpoint ——也就是页面正在调用的那个——你获取数据的速度会更快, 而且比抓取渲染后的 HTML 稳定得多,因为后者在每次 HTML 结构变动时都会失效。 这个模板为你提供了一个体量小巧、类型完善且经过充分测试的起点: - `HiddenApiClient` —— 一个带有可注入 rate limiter 和 重试机制的友好 HTTP client。 - `parse_quotes` / `extract_all_quotes` —— 具体的使用示例。 - `extract_paginated` —— 一个通用的分页器,让你能在任何 分页 JSON API 上复用该模式。 ## 示例:quotes.toscrape.com [`quotes.toscrape.com`](https://quotes.toscrape.com) 是一个授权的抓取 沙盒。其 `/scroll` 页面会从内部 JSON endpoint 加载名人名言: ``` GET https://quotes.toscrape.com/api/quotes?page=1 ``` ``` { "has_next": true, "page": 1, "quotes": [ { "author": { "name": "Albert Einstein", "slug": "Albert-Einstein" }, "tags": ["change", "deep-thoughts"], "text": "The world as we have created it is a process of our thinking..." } ] } ``` 直接调用该 JSON 接口正是你在滚动页面时它所执行的操作——因此我们 采取同样的方式,持续分页直到 `has_next` 变为 `false`。这些数据属于公共领域的 文学名言(属于事实信息,非 PII)。 ## 快速开始 ``` python -m venv .venv source .venv/bin/activate pip install -e '.[dev]' pytest python scripts/live_demo.py ``` `pytest` 完全在 **离线且确定性的** 环境下运行(网络通过 `httpx.Mock Transport` 进行模拟,并且注入了时间)。唯一涉及 网络请求的文件是 `scripts/live_demo.py`。 ## 在你自己的目标上复用 1. 找到隐藏的 endpoint —— 参见 [`docs/how-to-find-a-hidden-api.md`](docs/how-to-find-a-hidden-api.md)。 2. 为你的记录编写一个小巧的 `parse_fn(payload) -> list` 函数。 3. 调用 `extract_paginated(client, "/your/path", parse_fn)`。 ## 适用范围 该模板像普通访问者一样读取 **公开的、事实性 / 非 PII 数据**: - 遵守 `robots.txt` 和速率限制(内置的 `RateLimiter` 会强制执行 友好的延迟)。 - 使用具有描述性的 User-Agent 标识你的 client。 - 无需身份验证,不涉及私人用户的个人数据。 - 检查目标网站的服务条款,仅对你被允许读取和拥有的数据进行操作。**你自行拥有并负责** 你所收集的数据。 ## 许可证 MIT —— 详见 [LICENSE](LICENSE)。
标签:Python, 命令控制, 安全规则引擎, 数据采集, 无后门, 模板项目, 运行时操纵, 逆向工具