是否可以将网站的内容(一组 HTML 页面)直接下载到内存而不写入磁盘?
我有一个机器集群,每台机器安装了 24G,但我被磁盘配额限制为几百 MB。我正在考虑将输出重定向wget
到某种内存结构而不将内容存储在磁盘上。另一种选择是创建我自己的版本,wget
但可能有一种简单的方法来使用管道
还有什么是并行运行此下载的最佳方式(集群有> 20个节点)。在这种情况下不能使用文件系统。
是否可以将网站的内容(一组 HTML 页面)直接下载到内存而不写入磁盘?
我有一个机器集群,每台机器安装了 24G,但我被磁盘配额限制为几百 MB。我正在考虑将输出重定向wget
到某种内存结构而不将内容存储在磁盘上。另一种选择是创建我自己的版本,wget
但可能有一种简单的方法来使用管道
还有什么是并行运行此下载的最佳方式(集群有> 20个节点)。在这种情况下不能使用文件系统。
查看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;
更新:我不知道您可以使用Fuse和Fuse.pm在 Perl 中实现自己的文件系统。另请参阅Fuse::InMemory。
如果你 a) 已经在使用 Perl,b) 想要下载 HTML,并且 c) 解析它,我总是推荐LWP和HTML::TreeBuilder。
你是根吗?你可以只使用一个tmpfs
.
重新编辑:您不受 CPU 限制,您不需要使用每台机器。xargs -n SOME_NUMBER
假设有几个,您可以使用拆分您的根 url 列表。
但是如果你热衷于共享内存,你可以设置一个集群 memcache 并使用memcachefs将它安装在每台机器上。
wget <url> -O -
将 URL 的内容写入标准输出,然后可以在内存中捕获。