wget下载多个同时连接

jub*_*ubo 194 wget download

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

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

gma*_*ian 195

使用aria2:

aria2c -x 16 [url]
#          |
#          |
#          |
#          ----> the number of connections 
Run Code Online (Sandbox Code Playgroud)

http://aria2.sourceforge.net

我喜欢它 !!

  • 我没有看到这有助于下载一个网站 - 看起来它只下载1个文件.如果这是真的 - 投票应该是-ve. (26认同)
  • 不要忘记`-s`来指定分割数,而`-k`来指定每个分割段的最小大小 - 否则你可能永远不会到达`-x` max连接. (9认同)
  • 我同意,这不是一个好的答案,因为aria2不能像wget或lftp那样进行web或ftp镜像.lftp可以镜像以及支持多个连接. (8认同)
  • @Stephen 这是通过使用多个套接字而不是一个连接到服务器来更快地*从*网站下载非常大的文件。这不是为了抓取网站。 (2认同)

tho*_*han 104

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

我认为我们可以做得比gmarian回答好一点.

正确的方法是使用aria2.

aria2c -x 16 -s 16 [url]
#          |    |
#          |    |
#          |    |
#          ---------> the number of connections here
Run Code Online (Sandbox Code Playgroud)

  • 记录`-x, - max-connection-per-server = NUM​​每次下载到一台服务器的最大连接数.可能的值:1-16默认值:1`和`-s, - split = N使用N个连接下载文件.如果给出的N个URI超过N个,则使用前N个URI,其余URL用于备份.如果给出的URI少于N个,则会多次使用这些URL,以便同时进行N个连接.与同一主机的连接数受-max-connection-per-server选项的限制.另请参阅--min-split-size选项.可能的值:1-*默认值:5` (17认同)
  • 自1.10版本以来,单独的选项-s不再从单个服务器拆分文件.人们需要一起使用--max-connection-per-server来强制建立多个连接.请参阅aria2文档:`关于连接数自1.10.0发布以来,aria2默认情况下每个主机使用1个连接,并且具有20MiB段大小限制.因此,无论使用-s选项指定什么值,它都会为每个主机使用1个连接.要使其行为类似于1.9.x,请使用--max-connection-per-server = 4 --min-split-size = 1M. (3认同)
  • @SamuelLi 更新的简写是“aria2c -x 4 -k 1M url”,对我来说效果很好(每个连接限制为 100k 的服务器让我使用上述参数以 400k 下载) (2认同)
  • 重要的是,“aria2”*不*支持递归 HTTP 下载,如果需要“-r”,它会成为“wget”的不合格替代品。 (2认同)

Nik*_*rev 47

既然没有提到GNU parallel,那么让我给出另一种方式:

cat url.list | parallel -j 8 wget -O {#}.html {}
Run Code Online (Sandbox Code Playgroud)

  • 这是有趣的方法.当您需要下载大文件并且每个连接的速度有限时不太适用,但在下载多个文件时非常有用. (4认同)
  • 不,它将列表拆分为8个工作 (4认同)
  • 不过,那是 [`cat` 的无用使用](http://www.iki.fi/era/unix/award.html)。在这种有限的上下文中,它是无害的,但也许您不想犯下这种反模式。 (2认同)

SMU*_*hah 39

我发现(可能) 一个解决方案

在从一个服务器下载几千个日志文件到下一个服务器的过程中,我突然需要在BSD中进行一些严格的多线程下载,最好是使用Wget,因为这是我能想到的最简单的处理方式.有点环顾四周带我到这个小金块:

wget -r -np -N [url] &
wget -r -np -N [url] &
wget -r -np -N [url] &
wget -r -np -N [url]
Run Code Online (Sandbox Code Playgroud)

只需重复wget -r -np -N [url]你需要的多个线程...现在给出这个并不漂亮,并且肯定有更好的方法来做到这一点但如果你想要快速和肮脏的东西它应该做的伎俩...

注:该选项-N使得wget下载只有"新"的文件,这意味着它不会覆盖或重新下载文件,除非在服务器上的时间戳的变化.

  • 但是,不是为每个进程下载整套工件吗? (11认同)
  • @KaiMattern:添加`-nc`选项:"no clobber" - 它会导致wget忽略isady下载(甚至部分)文件. (9认同)
  • 我有一个需要下载的图像列表,这对我也有用:`wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc` 非常丑陋,但是,嘿,它有效。:P (2认同)
  • 由于某种原因使这些连接之一断开会为您提供未完成的文件,而不会被其他连接触及。这种方法会产生完整性问题。 (2认同)
  • `-b` 标志将在后台运行 wget 进程,作为 bash 内置的 `&` 作业控制的替代。如果未指定 `-o <filename>`,则 STDOUT 将写入 wget-log。很适合写脚本。有关更多详细信息,请参阅 wget(1)。 (2认同)

Lor*_*oh. 17

另一个可以做到这一点的程序是axel.

axel -n <NUMBER_OF_CONNECTIONS> URL
Run Code Online (Sandbox Code Playgroud)

Ubuntu手册页.

  • 该程序允许无限数量的连接,这在某些情况下非常有用. (4认同)
  • 很棒的工具。对于 centos6.xi 使用 http://rpm.pbone.net/index.php3/stat/4/idpl/16390122/dir/redhat_el_6/com/axel-2.4-1.el6.rf.x86_64.rpm.html (2认同)
  • 我通常做 `axel -n 4 "user:pasword@http://domain.tld/path/file.ext"` (2认同)

roc*_*oot 16

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

回答你的问题:

mget --num-threads=4 [url]

UPDATE

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

--num-threads现在--max-threads.

  • 不错的发现。谢谢你! (2认同)
  • 伟大的!我喜欢它如何进行递归下载,并与我现有的“wget”命令一起使用。如果您在编译 wget2 时遇到困难,另一种选择可能是使用 [docker 镜像](https://www.google.de/search?q=docker+wget2)。 (2认同)

小智 13

我强烈建议使用httrack.

例如: httrack -v -w http://example.com/

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

  • 它不支持用户提供的会话cookie,以及许多其他事情...... (2认同)

run*_*uhl 9

正如其他海报所提到的,我建议你看看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] 
Run Code Online (Sandbox Code Playgroud)

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

aria2c -j 5 [url] [url2]
Run Code Online (Sandbox Code Playgroud)

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


use*_*677 7

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


小智 5

尝试pcurl

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

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


Dav*_*orp 5

使用

aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &
Run Code Online (Sandbox Code Playgroud)

在websites.txt中每行放置1个url,例如:

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
Run Code Online (Sandbox Code Playgroud)