ariedotcodotnz/wayback-machine-downloader-python
GitHub: ariedotcodotnz/wayback-machine-downloader-python
Python版Wayback Machine下载器,用于下载存档网站。
Stars: 1 | Forks: 0
# Wayback Machine 下载器
[](https://github.com/ariedotcodotnz/wayback-machine-downloader-python/actions/workflows/ci.yml)
[](https://github.com/ariedotcodotnz/wayback-machine-downloader-python/actions/workflows/testpypi.yml)
[](https://github.com/ariedotcodotnz/wayback-machine-downloader-python/actions/workflows/release.yml)
原始 Ruby 版本 `wayback-machine-downloader` 的 Python 端口,为喜欢使用 Python 工作流程从 Internet Archive Wayback Machine 下载存档网站的用户构建。
此工具有助于从 Wayback Machine 快照中恢复、镜像和存档旧网站。它适用于数字保存、网站恢复、静态网站恢复、OSINT 研究、历史网页分析以及重建已下线的网站。
此 Python 版本在原始 Ruby 实现的基础上增加了一些额外的修复、改进和用户体验改进。
## 突出功能
- 下载目标文件的最新捕获
- 下载每个带有时间戳的捕获,文件 ID 以时间戳为前缀
- 构建特定时间点的复合快照
- 使用 `.cdx.json` 和 `.downloaded.txt` 恢复中断的运行
- 使用 `--local` 选项重写存档链接以进行本地浏览
- 使用 `--page-requisites` 发现链接页面资源
- 使用 `--recursive-subdomains` 递归镜像子域名
- 保持实现轻量级依赖和完全可离线测试
## 要求
- Python 3.10 或更高版本
## 安装
从 PyPI 安装已发布的包:
```
python -m pip install wayback-machine-downloader
```
PyPI 分发名称为 `wayback-machine-downloader`;导入包
保持 `wayback_downloader`。
在开发时以可编辑模式安装包:
```
python -m pip install -e .
```
或直接从存储库运行:
```
python -m wayback_downloader --help
```
安装后,该包还公开了一个控制台脚本:
```
wayback-machine-downloader --help
```
## 快速入门
下载网站每个文件的最新版本:
```
python -m wayback_downloader https://example.com
```
列出计划捕获的内容而不下载:
```
python -m wayback_downloader --list https://example.com
```
下载所有历史捕获:
```
python -m wayback_downloader --all-timestamps https://example.com
```
构建特定时间点的复合快照:
```
python -m wayback_downloader --snapshot-at 20130101000000 https://example.com
```
重写现有下载的树以进行本地浏览:
```
python -m wayback_downloader --local-only ./websites/example.com
```
## 输出布局
默认情况下,下载写入以下位置:
```
./websites//
```
`` 通常为目标主机。例如:
```
websites/example.com/
```
下载器还在输出目录中使用两个状态文件:
- `.cdx.json`
从 CDX API 获取的缓存快照列表。
- `.downloaded.txt`
已成功写入的逻辑文件 ID。
这些文件允许后续运行恢复而不是从头开始。使用
`--reset` 在运行之前删除它们,或使用 `--keep` 在成功运行后保留它们。
## 常见工作流程
仅下载一个精确的 URL:
```
python -m wayback_downloader --exact-url https://example.com/index.html
```
按时间戳范围限制:
```
python -m wayback_downloader --from 20060101 --to 20071231 https://example.com
```
过滤 URL:
```
python -m wayback_downloader --only "/\\.(css|js|png)$/i" https://example.com
python -m wayback_downloader --exclude admin https://example.com
```
下载页面并立即排队链接资源:
```
python -m wayback_downloader --page-requisites --local https://example.com
```
递归镜像发现的子域名:
```
python -m wayback_downloader --recursive-subdomains --subdomain-depth 2 https://example.com
```
## 快照选择模式
下载器支持三种选择策略:
1. 每个逻辑文件的最新版本
默认行为。对于每个逻辑文件 ID,最新的捕获获胜。
2. 所有时间戳
使用 `--all-timestamps` 启用。时间戳成为逻辑
文件 ID 的一部分,因此每个捕获都保留。
3. 复合快照
使用 `--snapshot-at` 启用。对于每个文件,选择在
或之前请求的时间戳的最新捕获。
## URL 和文件名行为
以下实现细节值得了解,因为它们会影响输出树:
- 主机和尾部斜杠目录目标被规范化为 CDX 前缀查询,除非使用 `--exact-url`。
- 查询字符串使用简短摘要折叠到文件名中,例如
`app__q12ab34cd56ef.css`。
- 类似目录的捕获存储为 `.../index.html`。
- 如果文件在运行过程中阻止了后续需要的目录,则将其移动到
`index.html` 以便两个捕获可以共存。
## 本地重写
`--local` 选项在文件保存后将存档的绝对 URL 重写为本地相对引用。它处理:
- Wayback 主机重写的 URL
- 直接的绝对 HTTP/HTTPS 链接
- HTML 属性,如 `href`、`src` 和 `action`
- CSS `url(...)` 引用
- 包含绝对 URL 的 JavaScript 字符串字面量
`--local-only` 仅在现有目录上执行重写阶段,不接触存档。
## 发布
### GitHub Actions 自动化
此存储库包括以下 GitHub Actions 工作流程:
- 在 Python 3.10-3.13 上进行 CI 测试,以及一个 Windows 烟雾测试作业
- 在每次 CI 运行时构建 `sdist` 和 `wheel` 艺术品
- 手动发布到 TestPyPI
- 发布 GitHub Release 时发布到 PyPI
要使用包含的工作流程进行受信任的发布:
1. 创建名为 `testpypi` 和 `pypi` 的 GitHub 环境。
2. 在 TestPyPI 中,使用工作流程文件 `testpypi.yml` 和环境 `testpypi` 为此存储库注册受信任的发布者。
3. 在 PyPI 中,使用工作流程文件 `release.yml` 和环境 `pypi` 为此存储库注册受信任的发布者。
之后:
- 从操作选项卡手动运行 `Publish to TestPyPI` 工作流程以测试上传
- 发布 GitHub Release 以触发 `Publish to PyPI` 工作流程
### 手动发布
构建和验证分发存档:
```
python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*
```
首先上传到 TestPyPI:
```
python -m twine upload --repository testpypi dist/*
```
上传到 PyPI:
```
python -m twine upload dist/*
```
当 Twine 提示输入凭据时使用 API 令牌:
- 用户名:`__token__`
- 密码:您的 `pypi-...` 令牌
## 测试
运行测试套件:
```
python -B -m unittest discover -s tests -t .
```
编译模块以进行快速导入检查:
```
python -m compileall wayback_downloader tests
```
测试使用假传输和临时目录,因此它们不依赖于对 `web.archive.org` 的实时访问。
标签:PyPI, Python, Wayback Machine, Web爬虫, 互联网档案馆, 依赖管理, 历史数据分析, 反汇编, 子域名镜像, 安全可观测性, 数字存档, 数据恢复, 文件下载, 断点续传, 无后门, 版本控制, 网站存档, 逆向工具, 链接重写, 静态网站