popkov
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Доброго всем времени суток! У меня есть менее удобная, но зато и менее траффикоёмкая идея по закачке форумов. У многих форумов есть пункт "Версия для печати", позволяющий просматривать сразу все посты топика, а не открывать их постранично. Ссылки на него выглядят стандартно, например, для этого форума: http://forum.ru-board.com/misc.cgi?action=printtopic&forum=5&topic=N где N - номер топика. Поэтому оказывается достаточно загрузить все вэб-страницы с таким адресом, где N изменяется в определённом диапазоне. Для этого вначале надо создать текстовый файл с перечнем всех адресов (их там будут тысячи), а затем воспользоваться какой-нибудь программой, которая последовательно их все оттуда загрузит, например бесплатной консольной утилитой WGET ( http://forum.ru-board.com/topic.cgi?forum=5&topic=10066#8 ), у которой есть такая опция. Примеры: -Скачивание только HTML-файла: wget "http://forum.ru-board.com/misc.cgi?action=printtopic&forum=5&topic=0814" -E -Скачивание вместе со всеми картинками: wget "http://forum.ru-board.com/misc.cgi?action=printtopic&forum=5&topic=0814" -p -H -k -E -U "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0)" -e robots=off -nd -nc Все файлы будут сохранены в текущей директории командной строки. Имеет также смысл запретить загрузку содержимого, ведущего на сайты типа top.list.ru и т.п. при закачке вместе с картинками. Для этого форума параметры будут такими: "--exclude-domains="list.ru","hotlog.ru","static.exaccess.ru"" (без кавычек). Конкретно сама реализация для файла со списком URL'ов будет выглядеть так: wget -Hpk -nv -e robots=off -nd -nc --exclude-domains="list.ru","hotlog.ru","static.exaccess.ru" -U "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0)" -o log.log -i URLs.txt где URLs.txt - имя файла со списком URL'ов (по одному на строку, безо всяких дополнительных символов). Проверил для небольшого числа URL'ов - работает отлично! Сразу скажу, что нельзя закрывать программу до того момента, пока она не закончила свою работу, т.к. конвертация ссылок на картинки и каскадные таблицы стилей в них происходит в самый последний момент, когда все файлы уже загружены, причём только внутри тех HTML-страниц, которые были загружены в течение текущей сессии (это связано с тем, что WGET просто не знает, что пропускаемые при докачке файлы с не-HTML-расширением являются HTML-документами. Причём влияет здесь только расширение файла, получаемое из конкретного указанного URL'а). Однако если соединение разорвалось где-то в середине очереди, ничего страшного: загруженные файлы будут всё же конвертированы после того, как wget пройдет по списку оставшихся и не сможет их скачать. А нескачанные можно потом докачать повторным запуском программы, причём можно даже не модифицировать файл URLs.txt: всё равно то, что уже было скачано, заново закачиваться не будет (и, к сожалению, не будет обрабатываться, т.е. необходимые для корректного отображения страницы файлы, не успевшие загрузиться, так и не будут загружены)... Именно ради того, чтобы при обрыве соединения не загружались заново уже скачанные вэб-страницы, пришлось пожертвовать в этом варианте загрузки расширениями сохраняемых вэб-страниц: ни одна из них не будет иметь расширения .htm или .html. Полученные файлы будут иметь имена вида "misc.cgi@action=printtopic&forum=5&topic=NNNN", расширением по мнению операционной системы будет "cgi@action=printtopic&forum=5&topic=NNNN". Тем не менее, все перекрёстные ссылки между загруженными в течение одной сессии вэб-страницами будут работать, а ссылки на незагруженные страницы будут корректно перенаправлять в Интернет. Информация о том, какие файлы были загружены, а какие нет, будет выводиться в файл log.log, находящийся в той же папке, где и все загружаемые файлы. Из него можно будет узнать, какие файлы (особенно вэб-страницы) успели полностью скачаться. Если хотя бы часть файлов, принадлежащих данной вэб-странице, недокачаны (это адреса c соответствующими именами, идущие сразу после адреса вэб-страницы в файле log.log), следует удалить и саму вэб-страницу, и принадлежащие ей файлы, чтобы при докачке все эти файлы были корректно загружены. Если очень не хочется этим заниматься, и не жалко времени Интернета или траффика, вместо "-nc" можно написать "-NE". Тогда при докачке не будут заново загружаться только картинки и другие необходимые файлы, а сами вэб-страницы форума - будут. Но зато и сохраняться они будут сразу с правильным расширением... Единственным недостатком данного варианта является маловероятная ситуация, когда две разные вэб-страницы содержат, например, две различные картинки, расположенные на разных серверах, но имеющие одинаковое имя. В такой ситуации будет загружена только первая из них в порядке следования URL'ов в файле URLs.txt, и во второй вэб-странице ссылка на картинку будет вести на неё же. Этой ситуации можно легко избежать, если соединение с Интернетом достаточно надёжное, и Вы можете быть уверены, что процесс загрузки сможет дойти до конца. Тогда достаточно убрать параметр "-nc", и, раз всё будет закачано за один раз, добавить параметр "-E", чтобы загружаемые вэб-страницы сразу сохранялись с расширением HTML (это приведёт к тому, что, даже если указать параметр "-nc", при попытке дозакачать вэб-страницы их HTML-части будут заново загружаться, но необходимые для их корректного отображения файлы не будут. Впрочем, параметр "-nc" лишил бы нас единственного серьёзного преимущества второго варианта: загрузки всех разных файлов с одинаковым именем и сохранением их с разными именами. Есть, правда альтернатива в таком случае: оставить "-E" и добавить "-N". Тогда из двух одинаковых картинок будет сохранена только одна (хотя скачиваться, в общем случае, будут обе), но зато ссылка на вторую в соответствующей странице будет перенаправлять в Интернет. Остальные картинки при этом повторно закачиваться не будут, однако для каждой будет отправляться на сервер запрос о дате её последней модификации и размере, что займёт время и немного траффика): wget -Hpk -e robots=off -nd -E --exclude-domains="list.ru","hotlog.ru","static.exaccess.ru" -U "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0)" -i URLs.txt Если же нужна возможность докачки, но есть опасность, что часть разных файлов будут иметь одинаковые имена, можно воспользоваться менее красивым, но тоже достаточно удобным вариантом: wget -Hpk -nv -e robots=off -nH -nc --exclude-domains="list.ru","hotlog.ru","static.exaccess.ru" -U "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0)" -o log.log -i URLs.txt Здесь всё аналогично первому варианту, но будет создана масса поддиректорий, структуры которых будут воссоздавать структуру директорий на серверах, с которых ведётся закачка. | Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 16:10 04-12-2003 | Исправлено: popkov, 00:33 16-12-2003 |
|