我正在通过wget检索大量数据:
wget --save-cookies ~/.urs_cookies --load-cookies ~/.urs_cookies --keep-session-cookies --content-disposition -i links.dat
字符串links.dat
包含数千个指向小文件(~ 100 kB)的链接。每个文件下载需要0.2秒,HTTP请求响应需要5秒。下载需要14小时,基本上是等待HTTP请求响应。
URL transformed to HTTPS due to an HSTS policy
--2017-02-15 18:01:37-- https://goldsmr4.gesdisc.eosdis.nasa.gov/daac-bin/OTF/HTTP_services.cgi?FILENAME=%2Fdata%2FMERRA2%2FM2I1NXASM.5.12.4%2F1980%2F01%2FMERRA2_100.inst1_2d_asm_Nx.19800102.nc4&FORMAT=bmM0Lw&BBOX=43%2C1.5%2C45%2C3.5&LABEL=MERRA2_100.inst1_2d_asm_Nx.19800102.SUB.nc4&FLAGS=&SHORTNAME=M2I1NXASM&SERVICE=SUBSET_MERRA2&LAYERS=&VERSION=1.02&VARIABLES=t10m%2Ct2m%2Cu50m%2Cv50m
Connecting to goldsmr4.gesdisc.eosdis.nasa.gov (goldsmr4.gesdisc.eosdis.nasa.gov)|198.118.197.95|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 50223 (49K) [application/octet-stream]
Saving to: ‘MERRA2_100.inst1_2d_asm_Nx.19800102.SUB.nc4.1’
型
这似乎效率低下,有什么方法可以加快下载在这种情况下?
如果细节有用的话,我正在下载MERRA-2的数据。
1条答案
按热度按时间6yt4nkrj1#
Wget将重用现有的连接,用于对同一服务器的多个请求,从而可能节省建立和拆除套接字所需的时间。
您可以通过在命令行上提供多个URL来完成此操作。例如,要每批下载100个:
字符串
请注意,我还没有测试这个。它可能工作。如果它不工作,告诉我你的错误,我会尝试调试。
所以.这就是“连接重用”或“keepalive”。另一个可以加快下载速度的方法是HTTP Pipelining,它基本上允许在收到第一个响应之前发送第二个请求。
wget
不支持这一点,curl
的库支持它,但命令行工具不支持。我没有现成的工具来建议支持HTTP管道。(除此之外,工具建议是离题的。)你可以看到管道在this SO answer中是如何工作的。如果你想用你选择的支持libcurl的语言写一些东西,我相信你遇到的任何困难都会成为另一个有趣的额外StackOverflow问题。