Загрузка через wget в память и обход записи на диск - PullRequest
4 голосов
/ 11 января 2010

Можно ли загрузить содержимое веб-сайта - набор HTML-страниц - прямо в память без записи на диск?

У меня есть кластер машин с 24G установленной на каждом, но я ограничен дисковой квотой до нескольких сотен МБ. Я думал о перенаправлении вывода wget в какую-то структуру в памяти без сохранения содержимого на диске. Другой вариант - создать мою собственную версию wget, но, возможно, есть простой способ сделать это с трубами

Также, как лучше всего запустить эту загрузку параллельно (кластер имеет> 20 узлов). В этом случае нельзя использовать файловую систему.

Ответы [ 4 ]

13 голосов
/ 11 января 2010

См. Варианты загрузки wget :

‘- O file’

- выходной-документ = файл '

Документы не будут записаны в соответствующие файлы, но все будут объединены и записаны в файл. Если в качестве файла используется ‘-’, документы будут распечатаны на стандартный вывод, отключив преобразование ссылок. (Используйте ‘./-’ для печати в файл с буквальным названием ‘-’.)

Если вы хотите прочитать файлы в Perl-программе, вы можете вызвать wget с помощью обратных галочек.

В зависимости от того, что вам действительно нужно 1019 *, вы можете получить, просто используя LWP :: Simple * get.

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

Обновление: У меня было Не знаю Вы можете реализовать свою собственную файловую систему в Perl, используя Fuse и Fuse.pm . Смотрите также Fuse :: InMemory .

5 голосов
/ 12 января 2010

Если вы a) уже используете Perl, b) хотите загрузить HTML и c) проанализировать его, я всегда рекомендую LWP и HTML :: TreeBuilder .

5 голосов
/ 11 января 2010

Вы рут? Вы можете просто использовать tmpfs.

Повторное редактирование: вы не привязаны к процессору, вам не нужно использовать каждую машину. Вы можете использовать xargs -n SOME_NUMBER, чтобы разделить ваш список корневых URL, при условии, что их несколько.

Но если вы заинтересованы в совместном использовании памяти, вы можете настроить кластерный memcache и смонтировать его на каждой машине с помощью memcachefs .

2 голосов
/ 12 января 2010
wget <url> -O -

Запишет содержимое URL в стандартный вывод, который затем может быть записан в памяти.

...