10

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

Пример: https://www.tumblr.com/

Ожидать:

  • Index.html
  • Любые загруженные изображения
  • Любые загруженные файлы JS
  • Любые загруженные файлы CSS
  • Любые изображения, загруженные в файл CSS
  • ссылки на ресурсы страницы, локализованные для работы с загруженными копиями (без веб-зависимости)

Мне интересно знать, можете ли вы помочь мне найти лучший синтаксис wget или другой инструмент, который сделает это. Инструменты, которые я пробовал, обычно не загружают изображения с помощью CSS, поэтому страница никогда не выглядит правильно при локальной загрузке. Спасибо!

Касательное решение

Я нашел способ сделать это с помощью FireFox. Сохранение по умолчанию не работает, и есть дополнение, которое называется "Сохранить завершено", которое, очевидно, может с этим справиться. Тем не менее, вы не можете скачать его, потому что он говорит, что он не поддерживается в текущей версии Firefox. Причина в том, что он был свернут в это дополнение: "Формат архива Mozilla". Установите это, затем, когда вы используете File> «Save Page As ..», появляется новая опция «Web Page, complete», которая по сути является старым аддоном, который исправляет стандартную реализацию, используемую FireFox (что ужасно). Это не решение WGET, но оно обеспечивает работоспособное решение.

РЕДАКТИРОВАТЬ: Еще одна нелепая проблема для тех, кто может следовать этому вопросу в будущем, пытаясь сделать это. Чтобы заставить аддон работать должным образом, вам нужно в меню "Инструменты"> "Формат архива Mozilla" и изменить (ужасный) параметр по умолчанию "сделать точный снимок страницы" на «сохранить сценарии и исходный код с помощью команды" Сохранить завершено "», в противном случае аддон очистит все ваши файлы скриптов и замените их текстом "/* Скрипт удален с помощью сохранения снимка */".

5 ответов5

11

wget -p -k http://ExampleSite.com

-P даст вам все необходимые элементы для правильного просмотра сайта (CSS, изображения и т.д.). -K изменит все ссылки (включая ссылки для CSS и изображений), чтобы вы могли просматривать страницу в автономном режиме, как она появилась в Интернете.

Обновление: это характерно для вашего примера сайта: tumblr.com

wget -H -N -k -p --exclude-domains quantserve.com --no-check-certificate -U "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110613 Firefox/6.0a2" https://www.tumblr.com

Разбивка:

-H = Позволяет wget охватить чужой хост. Требуется, поскольку у tumblr нет изображений на главной странице по тому же адресу, они используют secure.assets.tumblr.com, см. Примечание об исключении доменов.

-N = будет захватывать только те файлы, которые новее, чем у вас сейчас, в случае, если вы снова загружаете ту же страницу через какое-то время

-k = конвертировать ваши ссылки для правильного просмотра в автономном режиме

-p = захватывает все необходимые элементы для правильного просмотра (CSS, изображения и т. д.)

--exclude-domains =, поскольку на домашней странице tumblr.com есть ссылка на quantserve.com, и я предполагаю, что вы не хотите этого материала, вам нужно исключить его из загрузки wget. Примечание: это очень важный момент, который вы должны использовать с -H, потому что, если вы заходите на сайт и у него есть несколько ссылок на внешние хосты (например, рекламодатели и аналитики), то вы тоже захотите получить этот материал!

--no-check-Certificate требуется, так как Tumblr использует https

-U меняет пользовательский агент. В данном случае это не обязательно, так как он позволяет использовать пользовательский агент wget по умолчанию, но я знаю, что некоторые сайты его блокируют. Я просто добавил это здесь, так что на случай, если у вас возникнут проблемы на других сайтах. В приведенном ниже фрагменте кода он выглядит как Mozilla Firefox 6.02a.

наконец у вас есть сайт: https://www.tumblr.com

3

Для конкретного сайта, который вы упомянули, и многих других, закодированных как это, wget (и curl) просто не будет работать. Проблема в том, что некоторые ссылки на ресурсы, необходимые для отображения страницы в браузере, сами создаются с помощью javascript. Wget имеет запрос на функцию в ожидании запуска JavaScript:

http://wget.addictivecode.org/FeatureSpecifications/JavaScript

Однако до тех пор, пока это не будет завершено, сайты, которые создают ссылки на ресурсы с использованием javascript, не будут клонироваться с помощью wget. Самое простое решение - найти инструмент, который на самом деле создает DOM и анализирует javascript, как движок браузера (то есть метод firefox, который вы упомянули).

1

Вы также можете сделать это автоматически (или программно, если вы делаете кодирование), введя команду через оболочку с помощью wget:

wget --convert-links -r http://www.yourdomain.com

Он загрузит страницу и внутренние файлы и сделает ссылки локальными.

-1
wget -r http://www.example.com

Я думаю, что хватит всего, но попробую и узнаю.

-1

$(man wget):

-п

--page-реквизиты

Эта опция заставляет Wget загружать все файлы, необходимые для правильного отображения заданной HTML-страницы. Это включает в себя такие вещи, как встроенные изображения, звуки и ссылочные таблицы стилей.

Обычно при загрузке одной HTML-страницы любые необходимые документы, которые могут потребоваться для ее правильного отображения, не загружаются. Использование -r вместе с -l может помочь, но, поскольку Wget обычно не различает внешние и встроенные документы, обычно оставляют "листовые документы", в которых отсутствуют их реквизиты.

Например, допустим, документ 1.html содержит тег «IMG>», ссылающийся на 1.gif, и тег «<A>», указывающий на внешний документ 2.html. Скажем, что 2.html похож, но его изображение 2.gif и ссылки на 3.html. Скажите, что это продолжается до некоторого произвольно большого числа.

Если кто-то выполняет команду:

wget -r -l 2 http://<site>/1.html

затем будут загружены 1.html, 1.gif, 2.html, 2.gif и 3.html. Как видите, 3.html не имеет необходимого 3.gif, потому что Wget просто считает количество прыжков (до 2) от 1.html, чтобы определить, где остановить рекурсию. Однако с помощью этой команды:

wget -r -l 2 -p http://<site>/1.html

все вышеуказанные файлы и 3.html 3.gif будут загружены. Так же,

wget -r -l 1 -p http://<site>/1.html

приведет к загрузке 1.html, 1.gif, 2.html и 2.gif. Можно подумать, что:

wget -r -l 0 -p http://<site>/1.html

скачал бы только 1.html и 1.gif, но, к сожалению, это не так, потому что -l 0 эквивалентно -l inf --- то есть бесконечной рекурсии. Чтобы загрузить одну HTML-страницу (или несколько из них, все указанные в командной строке или во входном файле -i URL-адреса) и ее (или их) реквизиты, просто оставьте off -r и -l:

wget -p http://<site>/1.html

Обратите внимание, что Wget будет вести себя так, как если бы был указан ключ -r, но будет загружена только эта отдельная страница и ее реквизиты. Ссылки с этой страницы на внешние документы переходить не будут. На самом деле, чтобы загрузить одну страницу и все ее реквизиты (даже если они существуют на отдельных веб-сайтах) и убедиться, что партия отображается правильно локально, этот автор любит использовать несколько опций в дополнение к -p:

wget -E -H -k -K -p http://<site>/<document & gt ;

Чтобы завершить эту тему, стоит знать, что идея Wget о ссылке на внешний документ - это любой URL, указанный в теге <A>, теге <AREA> или теге <LINK>, отличном от «< LINK REL = "таблица стилей"> ".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .