ariedotcodotnz/wayback-machine-downloader-python

GitHub: ariedotcodotnz/wayback-machine-downloader-python

Python版Wayback Machine下载器,用于下载存档网站。

Stars: 1 | Forks: 0

# Wayback Machine 下载器 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/4ea9adab07040029.svg)](https://github.com/ariedotcodotnz/wayback-machine-downloader-python/actions/workflows/ci.yml) [![发布到 TestPyPI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/709a33c513040030.svg)](https://github.com/ariedotcodotnz/wayback-machine-downloader-python/actions/workflows/testpypi.yml) [![发布到 PyPI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7e07685e8e040031.svg)](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爬虫, 互联网档案馆, 依赖管理, 历史数据分析, 反汇编, 子域名镜像, 安全可观测性, 数字存档, 数据恢复, 文件下载, 断点续传, 无后门, 版本控制, 网站存档, 逆向工具, 链接重写, 静态网站