15.7 非交互式地下载整个网站
wget
如果你想备份整个网站,或是下载别人的网站,也得用wget
。在上一节用wget
抓取回了单个的文件,此外,还可以用它获取整个网站的内容。
说明 请合理使用
wget
。不要用它下载大型的网站,记住你在复制的是其他人创建和拥有的网站。不要因为想“窃取”什么而刻意复制整个网站。
假设正在浏览www.neato.com这个网站,现在位于www.neato.com/articles/index.htm这个链接上。你想复制/articles
目录下的所有东西,而且并不想要这个网站上的其他东西。以下命令就可以完成这个任务:
$ wget -E -r -k -p -w 5 –np
➥http://www.neato.com/articles/index.htm
也可以把各个选项组合起来使用,如下所示:
$ wget -Erkp -w 5 –np
➥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中看到的所有东西。如果没有这个选项,可能最终得到的只是一个不可查看的文件。
wget
的man page
非常长,介绍得也很详细。如果想了解wget
更加复杂的使用方法,它就是最终可以获取信息的地方。如果觉得对wget
感兴趣,那么开始读一下这些man page
吧,应该会学到很多。