网站镜像的两种方式:wget 与 HTTrack
最近想离线浏览一个网站,发现 wget 和 HTTrack 这两个工具都挺好用的。一个命令行操作,一个图形界面,各有各的优势。
遇到的场景
事情是这样的,某天看到一篇很棒的教程网站,内容特别丰富,但是那个网站偶尔会挂,而且有时候网速还特别慢。我就想着,要是能把它整个下载下来离线看就好了。
方式一:wget
wget 是个命令行工具,Linux 系统基本都自带。之前一直知道它可以下载文件,没想到还能直接把整个网站”搬”到本地来。
基本用法
最简单的镜像命令:
1 | wget --mirror https://example.com |
不过这样下载下来的链接还是指向原网站的,点击就跳转走了,体验不太好。所以一般我会加几个参数:
1 | wget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://example.com |
看着一长串参数有点吓人,其实就是告诉 wget:
--mirror:开启镜像模式,会递归下载--convert-links:把链接转换成本地链接,这样点击就不会跳到原网站了--adjust-extension:自动加上正确的文件后缀--page-requisites:把 CSS、图片这些资源也一起下载--no-parent:不要往上跑到父目录去
有个简写的形式,好记多了:
1 | wget -mkEpnp https://example.com |
踩过的坑
刚开始用的时候踩了几个坑:
下载太多层级。有些网站链接四通八达,不加限制的话可能会下载一大堆不需要的东西。可以用 -l 参数限制深度:
1 | wget -r -l 2 https://example.com # 只下载2层 |
被服务器封 IP。wget 默认下载速度很快,有些服务器会认为是在攻击。所以最好加点延迟:
1 | wget --mirror --wait=2 --limit-rate=200k https://example.com |
这样每次请求之间等 2 秒,速度限制在 200KB/s,服务器就不会觉得你在搞事情了。
优点与局限
wget 的优点是简单直接,一行命令搞定,Linux 系统自带不用安装。缺点是只有命令行,不熟悉终端的话上手有点门槛。
另外,wget 对动态渲染的网站支持不太好。现在很多网站内容是通过 JavaScript 动态加载的,这种网站 wget 只能抓到空的 HTML 框架。
方式二:HTTrack
HTTrack 是一个专门做网站镜像的工具,有图形界面,用起来比 wget 友好很多。
安装
- Windows:去官网下载安装包,一路下一步就行
- Linux:
sudo apt install httrack - Mac:
brew install httrack
图形界面使用
安装后打开 HTTrack,跟着向导走就行:
- 新建项目,起个名字
- 选择保存路径
- 输入要镜像的网址
- 点击开始,等待完成
整个过程点点鼠标就搞定了,完全不需要记命令。
命令行使用
HTTrack 也支持命令行:
1 | httrack https://example.com -O ./mirrored-site |
-O 参数指定保存目录。如果需要更多控制,可以加参数:
1 | httrack https://example.com -O ./mirrored-site -r2 -s0 |
-r2:递归深度为 2-s0:不跟随外部链接
优点与局限
HTTrack 的优点是有图形界面,操作直观,配置选项丰富,还可以暂停续传。缺点是体积比 wget 大,需要单独安装。
和 wget 一样,HTTrack 对 JavaScript 渲染的内容也支持有限。
小结
两个工具各有千秋:
- wget:命令行党首选,轻量、快速、Linux 自带
- HTTrack:图形界面友好,适合不想折腾命令行的朋友
对了,镜像网站的时候记得看看人家网站的 robots.txt 和使用条款,别给人家服务器造成太大压力,也不要拿去干不好的事情哈。