Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Размышления на тему скачивания сайтов целиком  (Прочитано 7156 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Denis Russkih

  • Автор темы
  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Привет всем! :)

Ни для кого не секрет, что существуют разные качалки, позволяющие сохранять оффлайновую версию сайта к себе на диск. В том числе, есть очень хороший опенсорсный HTTrack Website Copier. Да и традиционный Wget способен проделывать интересные вещи, если грамотно указать ключи (подробнее тут).

Но у всех этих средств есть один недостаток - они слишком универсальны. :) Поэтому скачивают много лишнего, не зная, что именно нужно пользователю. Они просто проходят на заданную глубину по всем обнаруженным ссылкам, и вытягивают оттуда всё, до чего могут дотянуться.

На многих сайтах встречаются "полезные ссылки", и это просто труба - качалка заглядывает по каждому адресу, оттуда переходит ещё куда-нибудь, начинает грузить кулинарные рецепты... :)

Чтобы хоть отчасти справиться с этой проблемой, придуманы механизмы фильтрации адресов по маскам. (В том же HTTrack Website Copier имеются достаточно неплохие возможности для этого.) Но всё равно, это довольно грубый подход, оставляющий много лишнего. (А иногда и отсекающий нужное.)

Помучившись с разными качалками, я пришёл к выводу, что самый лучший выход для людей, владеющих хотя бы основами программирования, - это писать свой собственный небольшой скрипт для скачивания, заточенный под конкретный сайт, с которого планируется сохранить данные.

Ведь использование логических операторов предоставляет гораздо больше простора, чем всякие маски. :) Ты уже словами, а не мимикой объясняешь компьютеру, чего тебе надо.

Мне известно, что вот здесь приведены основы bash-скриптинга. Вот тут - Advanced Bash-Scripting Guide на русском. В принципе, разобраться несложно.
Однако освоить скриптовый язык - это только полдела. Надо представлять себе, как его правильно использовать.

В связи с этим у меня есть несколько вопросов:
1. Как, используя терминал, загрузить страницу из веба сразу в переменную, для последующего поиска по ней? И не слишком ли это большое извращение? Может, существуют какие-то другие, более тонкие методы?
2. Можно ли как-то загружать результат работы php-скриптов? Или сохранение, скажем, форумов скриптовым методом невозможно? (Типа, доступен лишь жесткий html?)
3. Вопрос, связанный с предыдущим. Как быть, если при заходе на страницу должна происходить переадресация? (Скажем, на сайте установлена защита от скачивания по прямым ссылкам.) Реально ли вообще в этом случае загрузить файл из консоли?
4. Насколько быстрым обещает быть анализ каждой веб-страницы скриптом? (Я увижу окончание процесса, хотя бы когда выйду на пенсию?..)

P.S. Вот тут есть готовый скрипт siteget, но он лишь упрощает использование Wget, подставляя ряд ключей автоматом. А надо, чтобы bash-скрипт анализировал содержимое веб-страниц в соответствии со своей программой, брал на заметку нужные ссылки, отсеивал лишние. (Из-за чего, собственно, весь сыр-бор.)
« Последнее редактирование: 17 Января 2008, 16:54:35 от Denis Russkih »
Ubuntu 10.10

Оффлайн tempx77

  • Участник
  • *
  • Сообщений: 212
    • Просмотр профиля
Цитировать
Как в линуксовском терминале скачать и загрузить html-код веб-страницы в переменную, для последующего поиска по ней? И не слишком ли это большое извращение? Может, существуют какие-то другие, более тонкие методы?

а не лучше использовать perl? там есть регулярные выражения, с ними проще

Цитировать
Как быть, если при заходе на страницу должна происходить переадресация?

берешь ссылку, закачиваешь wget'ом (только эту ссылку), тот сам обрабатывает переадресацию.
Цитировать
Можно ли как-то загружать результат работы php-скриптов?

а чем результат работы php скрипта отличается от обычного html'а? afaik все php обрабатываются на сервере и выдают как результат html код.

Цитировать
Насколько быстрым обещает быть анализ каждой веб-страницы скриптом?

ну... чуть медленней чем закачка с помощью того же httrack'а (это если на перле реализовывать, он довольно быстро работает)

ps и учти, что html - это не все. для нормальной работы html'ов придется реализовывать закачку css js и прочего

Оффлайн cranky

  • Любитель
  • *
  • Сообщений: 81
    • Просмотр профиля
Да, могу тоже посоветовать только перл. А уж обработку переадресации, фильтр ссылок и всё остальное, на что хватит фантазии, реализовать на нём - это дело времени.

Оффлайн fen

  • Любитель
  • *
  • Сообщений: 91
    • Просмотр профиля
Ничего не имея против perl я посоветую автору данной темы python.

Оффлайн starloh

  • Новичок
  • *
  • Сообщений: 49
  • Так вот оно какое - ядро Linux!!!
    • Просмотр профиля

P.S. Вот тут есть готовый скрипт siteget, но он лишь упрощает использование Wget, подставляя ряд ключей автоматом. А надо, чтобы bash-скрипт анализировал содержимое веб-страниц в соответствии со своей программой, брал на заметку нужные ссылки, отсеивал лишние. (Из-за чего, собственно, весь сыр-бор.)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Вот пример анализа Web странички на Perl:

#! /usr/bin/perl -w
#
# Тестовый скипт для анализа содержимого файлов HTML
# Вытаскивает из страничек все ссылки
# Название файла передается скрипту в виде параметра
#

die "Определите файл для анализа...\n" if @ARGV != 1;
print "Файл для анализа => @ARGV \n";
open HTMLFILE, "< @ARGV" or die "Ошибка открытия файла: $!";
print "Все ровно - файл открыт для чтения!\n\n";
while (<HTMLFILE>){
if (m/(http:\/\/.*?)"/i){
print "$1 \n";
print "$1 \n" while ($' =~ m/(http:\/\/.*?)"/i);
}
}
close HTMLFILE;
print "\nФайл успешно обработан и закрыт...\n";

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Изучай и дерзай  ;)
Кривые руки - болезнь головы!

Оффлайн boa

  • Участник
  • *
  • Сообщений: 104
    • Просмотр профиля
    • Карта рыбака
Но у всех этих средств есть один недостаток - они слишком универсальны. :) Поэтому скачивают много лишнего, не зная, что именно нужно пользователю. Они просто проходят на заданную глубину по всем обнаруженным ссылкам, и вытягивают оттуда всё, до чего могут дотянуться.

На многих сайтах встречаются "полезные ссылки", и это просто труба - качалка заглядывает по каждому адресу, оттуда переходит ещё куда-нибудь, начинает грузить кулинарные рецепты... :)

Чтобы хоть отчасти справиться с этой проблемой, придуманы механизмы фильтрации адресов по маскам. (В том же HTTrack Website Copier имеются достаточно неплохие возможности для этого.) Но всё равно, это довольно грубый подход, оставляющий много лишнего. (А иногда и отсекающий нужное.)

А чем wget --mirror не устраивает? Он вроде по внешним ссылкам не ходит.

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
wget и точка.
Не парьтесь

 

Страница сгенерирована за 0.041 секунд. Запросов: 25.