网站镜像的两种方式: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,跟着向导走就行:

  1. 新建项目,起个名字
  2. 选择保存路径
  3. 输入要镜像的网址
  4. 点击开始,等待完成

整个过程点点鼠标就搞定了,完全不需要记命令。

命令行使用

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 和使用条款,别给人家服务器造成太大压力,也不要拿去干不好的事情哈。