Сохранить одну веб-страницу (с фоновыми изображениями) с помощью Wget

73

Я хочу использовать 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

user14124
источник
1
точно такая же строка (wget --no-parent - timestamping --convert-links - page-Requisites --no-directoryies --no-host-directoryies -erobots = off domain.tld) ​​фактически сохраняет фоновые изображения, на которые ссылаются из CSS после обновления до 1.12. В руководстве говорится: «С помощью URL-адресов http Wget извлекает и анализирует html или css из заданного URL-адреса, извлекая файлы, на которые ссылается документ, посредством разметки, такой как href или src, или значений css uri, указанных с помощью функционала url (). обозначение «. Вторая проблема еще должна быть решена
user14124

Ответы:

106

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

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

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

Также в случае, если robots.txtвы не можете добавить-e robots=off

ВВО
источник
Кажется, что это просто переписывает js и css в абсолютные URL-адреса
Грег Дин
1
неважно, это был robots.txt, запрещающий мне обновлять ответ с помощью обходного пути
Грег Дин
19
Расширен:wget --adjust-extension --span-hosts --convert-links --backup-converted --page-requisites [url]
Сэм
4
Или еще лучше wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows[url]
Петах
@ {etah: я попробовал вашу команду с вашими аргументами, она будет загружать другие веб-страницы, кроме указанной для нее.
Тим
7

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

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

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

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

Эрни Данбар
источник
1
Это, вероятно, будет сканировать весь веб-сайт с его под-URL
4253wyerg4e
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, чтобы получить их слишком.

шарлатан
источник
Как я уже сказал в комментарии к моему первому сообщению, похоже, что это было исправлено в v1.12. Я до сих пор не знаю, как включить изображения, которые находятся на других серверах, хотя.
user14124
да, синтаксический анализ CSS является новым в wget v1.12, он находится на вершине журнала изменений: freshmeat.net/urls/376000c9c7a02f7a3592180c2390ff04
квик-кихот
Попробуйте добавить опцию -H в список. Он обозначает --span-hosts и позволяет загружать контент с внешних хостов.
Майкл
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

webjay
источник