wget下载多个同时连接

时间:2010-08-07 14:37:42

标签: download wget

我正在使用wget下载网站内容,但是wget逐个下载文件。

如何使用4个同时连接进行wget下载?

18 个答案:

答案 0 :(得分:190)

使用aria2:

aria2c -x 16 [url]
#          |
#          |
#          |
#          ----> the number of connections 

http://aria2.sourceforge.net

我爱它!!

答案 1 :(得分:99)

Wget不支持多套接字连接,以加快文件下载速度。

我认为我们可以比gmarian回答更好。

正确的方法是使用aria2

aria2c -x 16 -s 16 [url]
#          |    |
#          |    |
#          |    |
#          ---------> the number of connections here

答案 2 :(得分:40)

由于尚未提及GNU并行,请允许我用另一种方式:

cat url.list | parallel -j 8 wget -O {#}.html {}

答案 3 :(得分:37)

我发现(可能) a solution

  

在从一台服务器下载几千个日志文件的过程中   到了下一个我突然有需要做一些严肃的多线程   在BSD中下载,最好用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仅下载“较新”文件,这意味着它不会覆盖或重新下载文件,除非它们的时间戳发生变化服务器

答案 4 :(得分:16)

另一个可以执行此操作的程序是axel

axel -n <NUMBER_OF_CONNECTIONS> URL

Ubuntu man page

答案 5 :(得分:14)

新的(但尚未发布的)工具是Mget。 它已经有很多来自Wget的选项,并附带了一个库,允许您轻松地将(递归)下载嵌入到您自己的应用程序中。

回答你的问题:

mget --num-threads=4 [url]

<强>更新

Mget现在开发为Wget2,修复了许多错误并提供了更多功能(例如HTTP / 2支持)。

--num-threads现在是--max-threads

答案 6 :(得分:12)

我强烈建议使用httrack。

ex:httrack -v -w http://example.com/

默认情况下,它将执行8个同时连接的镜像。 Httrack有很多选择。看看。

答案 7 :(得分:10)

正如其他海报所提到的那样,我建议你看看 aria2 。从版本1.16.1的Ubuntu手册页:

  

aria2是一个用于下载文件的实用程序。支持的协议是HTTP(S),FTP,BitTorrent和Metalink。 aria2可以从多个源/协议下载文件,并尝试利用您的最大下载带宽。它支持同时从HTTP(S)/ FTP和BitTorrent下载文件,而从HTTP(S)/ FTP下载的数据上传到BitTorrent swarm。使用Metalink的块校验和,aria2在下载BitTorrent等文件时自动验证数据块。

您可以使用-x标志指定每台服务器的最大连接数(默认值:1):

aria2c -x 16 [url] 

如果多个位置提供相同的文件,您可以选择从所有位置下载。使用-j标志指定每个静态URI的最大并行下载数(默认值:5)。

aria2c -j 5 [url] [url2]

有关详细信息,请查看http://aria2.sourceforge.net/。对于使用信息,手册页实际上是描述性的,并在底部有一个带有用法示例的部分。可以在http://aria2.sourceforge.net/manual/en/html/README.html找到在线版本。

答案 8 :(得分:7)

wget无法在多个连接中下载,而是可以尝试使用其他程序,如aria2。

答案 9 :(得分:5)

尝试pcurl

http://sourceforge.net/projects/pcurl/

使用curl而不是wget,并行下载10个段。

答案 10 :(得分:2)

make可以轻松并行化(例如make -j 4)。例如,这是一个简单的Makefile我用来使用wget并行下载文件:

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

答案 11 :(得分:2)

他们总是说这取决于但是在镜像网站时最好的存在httrack。它超级快速且易于操作。唯一的缺点是它所谓的支持论坛,但你可以使用official documentation找到自己的方式。它有GUI和CLI界面,它支持cookie只需阅读文档这是最好的。(使用此工具可以治愈你可以在硬盘上下载整个网络)

httrack -c8 [url]

默认情况下,最大并发连接数限制为8 以避免服务器过载

答案 12 :(得分:2)

使用

aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &

在website.txt中,每行输入1个网址,例如:

https://www.example.com/1.mp4
https://www.example.com/2.mp4
https://www.example.com/3.mp4
https://www.example.com/4.mp4
https://www.example.com/5.mp4

答案 13 :(得分:1)

为每个链接调用Wget并将其设置为在后台运行。

我尝试了此Python代码

with open('links.txt', 'r')as f1:      # Opens links.txt file with read mode
  list_1 = f1.read().splitlines()      # Get every line in links.txt
for i in list_1:                       # Iteration over each link
  !wget "$i" -bq                       # Call wget with background mode

参数:

      b - Run in Background
      q - Quiet mode (No Output)

答案 14 :(得分:1)

您可以使用xargs

-P 为进程数,例如设置-P 4,会同时下载4个链接,设置为-P 0xargs会启动尽可能多的进程并下载所有链接。

cat links.txt | xargs -P 4 -I{} wget {}

答案 15 :(得分:1)

我使用 gnu parallel

cat listoflinks.txt | parallel --bar -j ${MAX_PARALLEL} wget -nv {}
  1. cat 将行分隔的 URL 列表通过管道传输到并行
  2. --bar 标志将显示并行执行进度条
  3. MAX_PARALLEL env var 用于最大并行下载次数,请谨慎使用
<块引用>

提示:使用 --dry-run 查看执行命令时会发生什么。
cat listoflinks.txt | parallel --dry-run --bar -j ${MAX_PARALLEL} wget -nv {}

答案 16 :(得分:0)

使用Thing使xargs在多个文件中并行工作

wget

Aria2选项,正确处理小于20mb的文件

#!/bin/bash

mywget()
{
    wget "$1"
}

export -f mywget

# run wget in parallel using 8 thread/connection
xargs -P 8 -n 1 -I {} bash -c "mywget '{}'" < list_urls.txt

aria2c -k 2M -x 10 -s 10 [url] 将文件分成2mb的块

-k 2M-k的默认值为20mb,如果您未设置此选项并且文件小于20mb,则无论--min-split-size或{{ 1}}

答案 17 :(得分:0)

考虑使用Regular ExpressionsFTP Globbing。这样一来,您就可以根据不同的文件名起始字符组来多次启动wget。

例如,这是我如何在两个NAS之间同步文件夹:

[
  {
    "model": "app.Model",
    "pk": 1,
    "fields": {}
  }
]

第一个wget同步以wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.10 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[0-9a-hA-H]*" --directory-prefix=/volume1/foo & wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.11 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[!0-9a-hA-H]*" --directory-prefix=/volume1/foo & 开头的所有文件/文件夹,第二个线程同步所有其他内容。

这是在具有一个10G以太网端口(10.0.0.100)的NAS和具有两个1G以太网端口(10.0.0.10和10.0.0.11)之间进行同步的最简单方法。我将通过0, 1, 2... F, G, H的两个wget线程绑定到不同的以太网端口,并通过在每行的末尾放置--bind-address来并行调用它们。这样一来,我就能够复制总容量为2x 100 MB / s = 200 MB / s的大型文件。