Y2Z/monolith
GitHub: Y2Z/monolith
将完整网页(含 CSS、图片、JS 等资源)打包为单一自包含 HTML 文件的命令行工具。
Stars: 15250 | Forks: 460
[](https://github.com/Y2Z/monolith/actions?query=workflow%3AGNU%2FLinux)
[](https://github.com/Y2Z/monolith/actions?query=workflow%3AmacOS)
[](https://github.com/Y2Z/monolith/actions?query=workflow%3AWindows)
[](https://apify.com/snshn/monolith?fpr=snshn)
```
_____ _____________ __________ ___________________ ___
| \ / \ | | | | | |
| \/ __ \| __ | | ___ ___ |__| |
| | | | | | | | | | | |
| |\ /| |__| |__| |___| | | | | __ |
| | \__/ | |\ | | | | | | |
|___| |__________| \___________________| |___| |___| |___|
```
数据囤积者的梦想成真:将任何网页打包成一个单独的 HTML 文件。你终于可以用存放在你那宝贵小硬盘里的无数个 .html 文件,来替换掉那无数个打开的标签页了。
与传统的“网页另存为”不同,`monolith` 不仅能保存目标文档,还能**同时**嵌入 CSS、图片和 JavaScript 资源,生成一个存储和分享起来都十分轻松的单一 HTML5 文档。
如果与使用 `wget -mpk` 保存网站相比,该工具会将所有资源作为 data URLs 嵌入,因此即使在没有网络连接的情况下,浏览器也能完全按照该页面在互联网上的原貌来渲染保存的页面。
## 安装说明
#### 使用 [Cargo](https://crates.io/crates/monolith)(跨平台)
```
cargo install monolith
```
#### 通过 [Homebrew](https://formulae.brew.sh/formula/monolith)(macOS 和 GNU/Linux)
```
brew install monolith
```
#### 通过 [Chocolatey](https://community.chocolatey.org/packages/monolith)(Windows)
```
choco install monolith
```
#### 通过 [Scoop](https://scoop.sh/#/apps?q=monolith)(Windows)
```
scoop install main/monolith
```
#### 通过 [Winget](https://winstall.app/apps/Y2Z.Monolith)(Windows)
```
winget install --id=Y2Z.Monolith -e
```
#### 通过 [MacPorts](https://ports.macports.org/port/monolith/summary)(macOS)
```
sudo port install monolith
```
#### 使用 [Snapcraft](https://snapcraft.io/monolith)(GNU/Linux)
```
snap install monolith
```
#### 使用 [Guix](https://packages.guix.gnu.org/packages/monolith)(GNU/Linux)
```
guix install monolith
```
#### 使用 [NixPkgs](https://search.nixos.org/packages?channel=unstable&show=monolith&query=monolith)
```
nix-env -iA nixpkgs.monolith
```
#### 使用 [Flox](https://flox.dev)
```
flox install monolith
```
#### 使用 [Pacman](https://archlinux.org/packages/extra/x86_64/monolith)(Arch Linux)
```
pacman -S monolith
```
#### 使用 [aports](https://pkgs.alpinelinux.org/packages?name=monolith)(Alpine Linux)
```
apk add monolith
```
#### 使用 [XBPS Package Manager](https://voidlinux.org/packages/?q=monolith)(Void Linux)
```
xbps-install -S monolith
```
#### 使用 [FreeBSD packages](https://svnweb.freebsd.org/ports/head/www/monolith/)(FreeBSD)
```
pkg install monolith
```
#### 使用 [FreeBSD ports](https://www.freshports.org/www/monolith/)(FreeBSD)
```
cd /usr/ports/www/monolith/
make install clean
```
#### 使用 [pkgsrc](https://pkgsrc.se/www/monolith)(NetBSD、OpenBSD、Haiku 等)
```
cd /usr/pkgsrc/www/monolith
make install clean
```
#### 使用 [containers](https://www.docker.com/)
```
docker build -t y2z/monolith .
sudo install -b dist/run-in-container.sh /usr/local/bin/monolith
```
#### 从 [源码](https://github.com/Y2Z/monolith)
依赖项:`libssl`、`cargo`
```
git clone https://github.com/Y2Z/monolith.git
cd monolith
make install
```
#### 使用 [预编译二进制文件](https://github.com/Y2Z/monolith/releases)(Windows、基于 ARM 的设备等)
每个版本都包含适用于 Windows、GNU/Linux 以及非标准 CPU 架构平台的预编译二进制文件。
## 用法
```
monolith https://lyrics.github.io/db/P/Portishead/Dummy/Roads/ -o %title%.%timestamp%.html
```
```
cat some-site-page.html | monolith -aIiFfcMv -b https://some.site/ - > some-site-page-with-assets.html
```
## 选项
- `-a`:排除音频源
- `-b`:使用 `自定义基础 URL`
- `-B`:禁止从指定域名获取资源
- `-c`:排除 CSS
- `-C`:从 `文件` 读取 cookies
- `-d`:仅允许从指定 `域名` 获取资源
- `-e`:忽略网络错误
- `-E`:使用 `自定义编码` 保存文档
- `-f`:忽略 frames
- `-F`:排除网页字体
- `-h`:打印帮助信息
- `-i`:移除图片
- `-I`:隔离文档
- `-j`:排除 JavaScript
- `-k`:接受无效的 X.509 (TLS) 证书
- `-m`:以 MHTML 格式而非 HTML 格式输出
- `-M`:不添加时间戳和 URL 信息
- `-n`:提取 NOSCRIPT 元素的内容
- `-o`:将输出写入 `文件`(使用“-”表示 STDOUT)
- `-q`:安静模式
- `-t`:调整 `网络请求超时时间`
- `-u`:提供 `自定义 User-Agent`
- `-v`:排除视频
- `-V`:打印版本号
## 域名白名单和黑名单
选项 `-d` 和 `-B` 可用于控制允许从哪些域名获取资源,例如:
```
monolith -I -d example.com -d www.example.com https://example.com -o example-only.html
```
```
monolith -I -B -d .googleusercontent.com -d googleanalytics.com -d .google.com https://example.com -o example-no-ads.html
```
## 动态内容
Monolith 不包含 JavaScript 引擎,因此对于那些在初始加载后才获取和显示数据的网站,可能需要使用额外的工具。
例如,可以使用 Chromium (Chrome) 作为此类页面的预处理器:
```
chromium --headless --window-size=1920,1080 --run-all-compositor-stages-before-draw --virtual-time-budget=9000 --incognito --dump-dom https://github.com | monolith - -I -b https://github.com -o github.html
```
## 身份验证
```
monolith https://username:password@example.com -o example-basic-auth.html
```
## 代理
请设置 `https_proxy`、`http_proxy` 和 `no_proxy` 环境变量。
### Apify Actor 用法
## 贡献
如果发现任何问题,请提交 issue,这有助于让这个项目变得更好。
## 许可证
在法律允许的范围内,作者已将本软件的所有版权及相关邻接权利在世界范围内献给公共领域。
本软件在分发时不提供任何担保。
安装 cargo (GNU/Linux)
检查是否已安装 cargo ``` cargo -v ``` 如果尚未安装 cargo,请安装并将其添加到你现有的 ```$PATH``` 中(释义自[官方安装指南](https://doc.rust-lang.org/cargo/getting-started/installation.html)): ``` curl https://sh.rustup.rs -sSf | sh . "$HOME/.cargo/env" ``` 继续从源码安装:标签:HTML, Rust, 可视化界面, 数据提取, 文档结构分析, 网络流量审计, 网页存档, 请求拦截, 通知系统