68

Я хочу использовать Wget для сохранения отдельных веб-страниц (не рекурсивно, не целых сайтов) для справки. Так же, как Firefox "Веб-страница, полная".

Моя первая проблема: я не могу заставить Wget сохранить фоновые изображения, указанные в CSS. Даже если бы он сохранил файлы фоновых изображений, я не думаю, что --convert-links преобразует URL-адреса фоновых изображений в файле CSS, чтобы они указывали на локально сохраненные фоновые изображения. Firefox имеет ту же проблему.

Вторая проблема: если на странице, которую я хочу сохранить, есть изображения, размещенные на другом сервере (например, реклама), они не будут включены. --span-hosts не решает эту проблему с помощью строки ниже.

Я использую:wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-host-directories -erobots=off http://domain.tld/webpage.html

4 ответа4

103

Со страницы руководства Wget:

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

wget -E -H -k -K -p http://www.example.com/

Также в случае, если robots.txt запрещает, вы добавляете -e robots=off

7

Команда wget предлагает параметр --mirror , который делает то же самое, что и:

$ wget -r -N -l inf --no-remove-listing

Вы также можете добавить -x чтобы создать целую иерархию каталогов для сайта, включая имя хоста.

Возможно, вы не смогли бы найти это, если вы не используете новейшую версию wget однако.

2

Похоже, что wget и Firefox не анализируют CSS для ссылок для включения этих файлов в загрузку. Вы можете обойти эти ограничения, написав все, что можете, и написав сценарий извлечения ссылок из любого CSS или Javascript в загруженных файлах, чтобы создать список файлов, которые вы пропустили. Затем второй запуск wget в этом списке ссылок может захватить все, что было пропущено (используйте флаг -i чтобы указать URL-адреса списка файлов).

Если вам нравится Perl, в CPAN есть модуль CSS::Parser, который может дать вам простой способ извлечения ссылок таким способом.

Обратите внимание, что wget анализирует только определенную разметку html (href/src) и css uris (url()), чтобы определить, какие реквизиты страницы нужно получить. Вы можете попробовать использовать надстройки Firefox, такие как DOM Inspector или Firebug, чтобы выяснить, добавляются ли сторонние изображения, которые вы не получаете, через Javascript - если это так, вам нужно прибегнуть к скрипту или плагину Firefox, чтобы получить их тоже.

2

Я сделал Webtography для аналогичной цели: https://webjay.github.io/webtography/

Он использует Wget и помещает сайт в хранилище вашей учетной записи GitHub.

Я использую эти аргументы:

--user-agent=Webtography
--no-cookies
--timestamping
--recursive
--level=1
--convert-links
--no-parent
--page-requisites
--adjust-extension
--max-redirect=0
--exclude-directories=blog

https://github.com/webjay/webtography/blob/master/lib/wget.js#L15-L26

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