我正在使用wget下载网站内容,但是wget逐个下载文件。
如何使用4个同时连接进行wget下载?
答案 0 :(得分:190)
使用aria2:
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
我爱它!!
答案 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)
答案 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)
答案 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 0
,xargs
会启动尽可能多的进程并下载所有链接。
cat links.txt | xargs -P 4 -I{} wget {}
答案 15 :(得分:1)
我使用 gnu parallel
cat listoflinks.txt | parallel --bar -j ${MAX_PARALLEL} wget -nv {}
cat
将行分隔的 URL 列表通过管道传输到并行--bar
标志将显示并行执行进度条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 Expressions或FTP 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的大型文件。