5.2 网站下载
从给定的URL中下载文件或网页很简单,一些命令行下载工具就可以完成这项任务。
5.2.1 预备知识
wget
是一个用于文件下载的命令行工具,选项多且用法活。
5.2.2 实战演练
用wget
可以下载网页或远程文件:
- $ wget URL
例如:
- $ wget http://slynux.org
- --2010-08-01 07:51:20-- http://slynux.org/
- Resolving slynux.org... 174.37.207.60
- Connecting to slynux.org|174.37.207.60|:80... connected.
- HTTP request sent, awaiting response... 200 OK
- Length: 15280 (15K) [text/html]
- Saving to: "index.html"
- 100%[======================================>] 15,280 75.3K/s in
- 0.2s
- 2010-08-01 07:51:21 (75.3 KB/s) - "index.html" saved [15280/15280]
可以指定从多个URL处进行下载:
- $ wget URL1 URL2 URL3..
可以依据URL用wget
下载文件:
- $ wget ftp://example_domain.com/somefile.img
通常下载的文件名和URL中的文件名保持一致,下载信息或进度被写入stdout
。
你可以通过选项-O
指定输出文件名1。如果存在同名文件,那么会先将该同名文件清空(truncate)再将下载文件写入。
1 选项'-O file'
中的-O
并不是表示不采用URL中的文件名,而是由file指定。它的作用类似于shell重定向,也就是说,命令wget -O file http://foo
实际上相当于wget -O - http://foo > file
。
你也可以用选项-o
指定一个日志文件,从而不必将日志信息打印到stdout
。
- $ wget ftp://example_domain.com/somefile.img -O dloaded_file.img -o log
运行该命令,屏幕上不会出现任何内容。日志或进度信息被写入文件log,输出文件为dloaded_file.img。
由于不稳定的Internet连接,下载有可能被迫中断。我们可以将重试次数作为命令参数,这样一旦下载中断,wget
在放弃下载之前还会继续进行多次尝试。
用-t
指定重试次数:
- $ wget -t 5 URL
5.2.3 补充内容
wget
还有一些其他选项,用以应对不同的情况。来看看其中的一部分吧。
- 下载限速
当我们的下载带宽有限,却又有多个应用程序共享该Internet连接时,进行大文件下载往往将榨干所有的带宽,严重阻滞其他进程。wget
命令有一个内建的选项可以限定下载任务能够占有的最大带宽,从而使得其他应用程序流畅运行。
我们可以用--limit-rate
按照下面的方式对wget
限速:
- $ wget --limit-rate 20k http://example.com/file.iso
在命令中用k
(千字节)和m
(兆字节)指定速度限制。
还可以指定最大下载配额(quota)。配额一旦用尽,下载随之停止。在下载多个文件的时候,对总下载量进行限制是很必要的,这能够避免在无意中占用过多磁盘空间。
使用--quota
或-Q
:
- $ wget -Q 100m http://example.com/file1 http://example.com/file2
- 断点续传
如果使用wget
进行的下载在完成之前被中断,可以利用选项-c
从断点开始继续下载:
- $ wget -c URL
- 用cURL下载
cURL是另一个高级命令行工具,功能比wget
更胜一筹。
可以按照下面的方式用cURL下载:
- $ curl http://slynux.org > index.html
和wget
不同,curl
并不将下载数据写入文件,而是写入标准输出(stdout
)。因此我们必须用重定向操作符将数据从stdout
重定向到文件。
- 复制或镜像整个网站
wget
有一个选项可以使其像爬虫一样以递归的方式收集网页上所有的URL链接,并逐个下载,这样一来,我们就能够下载一个网站的所有页面。
要实现这个任务,可以按照下面的方式使用选项--mirror
:
- $ wget --mirror exampledomain.com
或者
- $ wget -r -N -l DEPTH URL
-l
指定页面层级DEPTH,这意味着wget
只会向下遍历指定的页面级数。这个选项要与-r
(recursive,递归选项)一同使用。另外,-N
允许对文件使用时间戳,URL表示下载的网站起始地址。
- 访问需要认证的HTTP或FTP页面
一些网页需要HTTP或FTP认证,可以用--user
和--password
提供认证信息:
- $ wget --user username --password pass URL
也可以不在命令行中指定密码,而由网页提示并手动输入密码,这就需要将--password
改为--ask-password
。