wget下载与多个同时连接
我正在使用wget下载网站内容,但wget一个接一个地下载文件。
如何使用4个并发连接来下载wget?
使用aria2:
aria2c -x 16 [url] # | # | # | # ----> the number of connections
我喜欢它 !!
Wget不支持多个套接字连接,以加速下载文件。
我想我们可以做得比gmarian回答好一点。
正确的方法是使用aria2
。
aria2c -x 16 -s 16 [url] # | | # | | # | | # ---------> the number of connections here
我发现(可能) 一个解决scheme
在从一台服务器下载几千个日志文件的过程中,我突然需要在BSD中进行一些严重的multithreading下载,最好是使用Wget,因为这是我能想到的最简单的方式。 有一点四处张望,把我引向了这个小块头:
wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url]
只要重复
wget -r -np -N [url]
就可以得到所需的线程…现在给出这个不是很漂亮,而且确实有更好的方法来做到这一点,但是如果你想要快速和肮脏的东西,它应该做诀窍…
注意:选项-N
使得wget
只下载“更新”的文件,这意味着它不会覆盖或重新下载文件,除非它们的时间戳在服务器上发生变化。
由于GNU并行还没有提到,让我换一种方式:
cat url.list | parallel -j 8 wget -O {#}.html {}
另一个可以做到这一点的程序是axel
。
axel -n <NUMBER_OF_CONNECTIONS> URL
Ubuntu的手册页 。
我强烈build议使用httrack。
例如: httrack -v -w http://example.com/
它将默认使用8个同时连接的镜像。 Htrack有很多select在哪里玩。 看一看。
wget无法下载多个连接,而是可以尝试用户的其他程序,如aria2。
正如其他海报所提到的,我build议你看看aria2 。 从版本1.16.1的Ubuntu手册页:
aria2是一个用于下载文件的工具。 支持的协议是HTTP(S),FTP,BitTorrent和Metalink。 aria2可以从多个来源/协议下载文件,并尝试利用您的最大下载带宽。 它支持从HTTP(S)/ FTP和BitTorrent同时下载文件,而从HTTP(S)/ FTP下载的数据则上传到BitTorrent群。 使用Metalink的块校验和,aria2在下载像BitTorrent这样的文件时自动validation数据块。
您可以使用-x
标志来指定每个服务器的最大连接数(默认值:1):
aria2c -x 16 [url]
如果同一个文件在多个位置可用,您可以select从所有位置下载。 使用-j
标志为每个静态URI指定最大并行下载数(默认值:5)。
aria2c -j 5 [url] [url2]
看看http://aria2.sourceforge.net/了解更多信息。; 对于使用信息来说,手册页是真正的描述性的,并且在底部具有使用示例。 在线版本可以在http://aria2.sourceforge.net/manual/en/html/README.htmlfind。;
一个新的(但尚未发布)的工具是Mget 。 它已经有很多Wget的选项,并附带一个库,允许您轻松地将(recursion)下载embedded到您自己的应用程序中。
回答你的问题:
mget --num-threads=4 [url]
UPDATE
Mget现在是作为Wget2开发的,有许多bug修复和更多function(例如HTTP / 2支持)。
--num-threads
现在是--max-threads
。
他们总是说这取决于,但是当涉及到网站镜像最好存在httrack 。 这是超快速和容易的工作。 唯一的缺点是所谓的支持论坛,但你可以使用官方文档find你的方式。 它具有GUI和CLI接口,它支持cookies只是阅读文档这是最好的(可以使用这个工具,你可以下载整个networking在你的硬盘上)
httrack -c8 [url]
默认情况下,同时连接的最大数量限制为8,以避免服务器过载
make
可以很容易并行化(例如make -j 4
)。 例如,下面是一个使用wget并行下载文件的简单Makefile
:
BASE=http://www.somewhere.com/path/to FILES=$(shell awk '{printf "%s.ext\n", $$1}' filelist.txt) LOG=download.log all: $(FILES) echo $(FILES) %.ext: wget -N -a $(LOG) $(BASE)/$@ .PHONY: all default: all