質問

Web サイトのコンテンツ (一連の HTML ページ) を、ディスクに書き出さずにメモリに直接ダウンロードすることは可能ですか?

それぞれ 24G がインストールされたマシンのクラスターがありますが、ディスク クォータによって数百 MB に制限されています。出力をリダイレクトすることを考えていました wget 内容をディスクに保存せずに、ある種のメモリ内構造に変換します。もう 1 つのオプションは、独自のバージョンの wget しかし、パイプを使ってそれを行う簡単な方法があるかもしれません

また、このダウンロードを並行して実行する最良の方法は何でしょうか (クラスターには 20 を超えるノードがあります)。この場合、ファイル システムは使用できません。

役に立ちましたか?

解決

見る wgetのダウンロードオプション:

「-Oファイル」

「--output-document=ファイル」

ドキュメントは適切なファイルに書き込まれませんが、すべてが連結されてファイルに書き込まれます。「-」をファイルとして使用すると、ドキュメントは標準出力に出力され、リンク変換が無効になります。(文字どおり「-」という名前のファイルに出力するには、「./-」を使用します。)

ファイルを Perl プログラムに読み込む場合は、次のように呼び出すことができます。 wget バッククォートを使用します。

あなたが何に応じて 本当に する必要があるので、単に使用するだけで取得できるかもしれません LWP::シンプルさんの get.

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

アップデート: 私は持っていました 分からない 次を使用して Perl で独自のファイル システムを実装できます。 ヒューズ そして Fuse.pm. 。こちらも参照 ヒューズ::インメモリ.

他のヒント

あなたがa)は、すでにPerlを使用している場合は、b)はHTMLをダウンロードしたい、そしてc)それを解析し、私はいつもお勧めします<のhref = "http://search.cpan.org/perldoc?LWP" のrel =」 LWP と HTML :: TreeBuilderする> "nofollowをnoreferrer。

は、rootされていますか?あなただけのtmpfsを使用することができます。

あなたの編集を再:あなたはCPUバインドされていないなら、あなたはすべてのマシンを使用する必要はありません。あなたはいくつかあると仮定すると、ルートのURLのリストを分割するxargs -n SOME_NUMBERを使用することができます。

しかし、あなたはメモリを共有に注目している場合は、クラスタのmemcacheを設定し、 memcachefsですべてのマシンにマウントすることができますのます。

wget <url> -O -

その後、メモリに取り込むことができ、標準出力へのURLの内容を書きます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top