15.7 非交互式地下载整个网站

wget

如果你想备份整个网站,或是下载别人的网站,也得用wget。在上一节用wget抓取回了单个的文件,此外,还可以用它获取整个网站的内容。

说明 请合理使用wget。不要用它下载大型的网站,记住你在复制的是其他人创建和拥有的网站。不要因为想“窃取”什么而刻意复制整个网站。

假设正在浏览www.neato.com这个网站,现在位于www.neato.com/articles/index.htm这个链接上。你想复制/articles目录下的所有东西,而且并不想要这个网站上的其他东西。以下命令就可以完成这个任务:

  1. $ wget -E -r -k -p -w 5 np
  2. http://www.neato.com/articles/index.htm

也可以把各个选项组合起来使用,如下所示:

  1. $ wget -Erkp -w 5 np
  2. http://www.neato.com/articles/index.htm

与上一节一样,该命令以wget作为开始,以想要使用的URL作为结束。命令选项中的-w(或--wait=[#])以前就看到过,它在这里的功能也一样。同样的还有-np(或--no-parent)和-r(或--recursive)选项。接下来看看这个例子中引入的几个新选项。

当下载整个网站时,一些页面可能不是以.htm.html的,而可能以.asp.php.cfm或其他扩展名结尾。这样,如果在你的计算机上查看下载好的网站时,就有问题了。如果你在计算机中运行了某种Web服务器,可能还好说;但很有可能你的计算机中并没有运行任何Apache之类的Web服务器。不过,即便没有Web服务器,用Web浏览器打开以.htm.html结尾的页面,它们也可能在计算机中显示出来。如果使用-E(或--html-extension)选项,wget就会对每个页面进行转换,让它们均以.html结尾,这样就能够在计算机中不用任何特殊的软件而查看它们了。

下载网站可能会引发一些其他问题,不过,幸好可以使用正确的wget选项来避免它们。当在计算机上打开用wget下载的页面时,页面上的链接可能会不起作用,这样就不能在页面之间进行导航。通过指定-k(或--convert-links)选项,就告诉wget重写页面上的链接,以便让它们能够在计算机上起作用。这个选项修复的不仅是指向页面的链接,还会修复指向图片、CSS(Cascading Style Sheet,层叠样式表)等文件的链接。用一下这个选项,你一定会对它感到满意。

说到CSS和图片,有必要说一下为什么需要使用-p(或--page-requisites)选项。为了能够让Web页面正常显示,Web开发人员可能需要指定与页面的HTML一同使用的图片、CSS和JavaScript文件。-p选项会要求wget下载为了正常显示网页而需要的任何文件。有了这个选项,在把页面下载到本机后,打开页面就能看到原来在Web中看到的所有东西。如果没有这个选项,可能最终得到的只是一个不可查看的文件。

wgetman page非常长,介绍得也很详细。如果想了解wget更加复杂的使用方法,它就是最终可以获取信息的地方。如果觉得对wget感兴趣,那么开始读一下这些man page吧,应该会学到很多。