4

是否可以将网站的内容(一组 HTML 页面)直接下载到内存而不写入磁盘?

我有一个机器集群,每台机器安装了 24G,但我被磁盘配额限制为几百 MB。我正在考虑将输出重定向wget到某种内存结构而不将内容存储在磁盘上。另一种选择是创建我自己的版本,wget但可能有一种简单的方法来使用管道

还有什么是并行运行此下载的最佳方式(集群有> 20个节点)。在这种情况下不能使用文件系统。

4

4 回答 4

13

查看wget 下载选项

'-O 文件'</p>

'--output-document=file'</p>

这些文档不会被写入适当的文件,但所有文件将连接在一起并写入文件。如果使用“-”作为文件,文档将打印到标准输出,禁用链接转换。(使用 './-' 打印到一个字面上名为 '-' 的文件。)

如果要将文件读入 Perl 程序,可以wget使用反引号调用。

根据您真正需要做的事情,您也许可以通过使用LWP::Simple来获得get

use LWP::Simple;
my $content = get("http://www.example.com/");
die "Couldn't get it!" unless defined $content;

更新:不知道您可以使用FuseFuse.pm在 Perl 中实现自己的文件系统。另请参阅Fuse::InMemory

于 2010-01-11T20:55:11.640 回答
5

如果你 a) 已经在使用 Perl,b) 想要下载 HTML,并且 c) 解析它,我总是推荐LWPHTML::TreeBuilder

于 2010-01-11T21:00:10.990 回答
5

你是根吗?你可以只使用一个tmpfs.

重新编辑:您不受 CPU 限制,您不需要使用每台机器。xargs -n SOME_NUMBER假设有几个,您可以使用拆分您的根 url 列表。

但是如果你热衷于共享内存,你可以设置一个集群 memcache 并使用memcachefs将它安装在每台机器上。

于 2010-01-11T20:54:47.877 回答
2
wget <url> -O -

将 URL 的内容写入标准输出,然后可以在内存中捕获。

于 2010-01-11T21:16:19.820 回答