有什么快速的方法可以下载大量小网页吗?

有什么快速的方法可以下载大量小网页吗?

我需要尽可能快地下载大量小页面。一页的平均大小为 3kb。有数百万个页面。首先,我尝试了,curl但速度太慢了,可能是因为它在等待服务器响应请求,然后对下一页执行相同的过程。

curl -O "http://website.com/pages/[0000001-1000000].html"

编辑:经过一些测试,我观察到了这些结果。我随时愿意接受更多建议。我希望进一步提高速度。

比较 1:(DNS 与无 DNS)

慢点:

curl -O "http://website.com/pages/[1-1000].html" -s -S

快点:

curl -O "http://90.111.123.222/pages/[1-1000].html" -s -S

下载大量小页面时,DNS延迟至关重要。

比较 2:(使用 curl 序列与“seq”)

慢点:

curl -O "http://90.111.123.222/pages/{1}.html" -s -S ::: $(seq 1 1000)

快点:

curl -O "http://90.111.123.222/pages/[1-1000].html" -s -S

比较3:(并行执行)

慢点:

time parallel -j 5 curl -O \'"http://90.111.123.222/pages/{1}.html"\'
-S -s ::: $(seq 1 1000)

快点:

( time curl -O "http://90.111.123.222/pages/[1-200].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[201-400].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[401-600].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[601-800].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[801-1000].html" -s -S & )

顺便说一句,显然运行更多的实例会在某种程度上提高这两种方法的速度。

答案1

您可以通过将操作分成几个较小的操作来加快速度。例如,您可以创建 10 个 curl 进程并将它们置于后台:

curl -O "http://website.com/pages/0[000000-999999].html" &
curl -O "http://website.com/pages/1[000000-999999].html" &
curl -O "http://website.com/pages/2[000000-999999].html" &
...

等等。

然而,更智能、更灵活的解决方案可能希望使用GNU并行因此可以并行下载多个文件,并并行处理任务分配。

使用你选择的包管理器进行安装,然后它会很简单

parallel -j 10 curl -O "http://website.com/pages/{1}" ::: $(seq -w 1000000)

这更优雅

答案2

下载并学习使用 GNU Parallel
https://www.gnu.org/software/parallel/

使用单行命令,您很快就能并行运行所有操作,而不仅仅是网页下载。

相关内容