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

87378
user14124

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

65
точно такая же строка (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 15 лет назад 1

4 ответа на вопрос

99
vvo

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

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

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

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

Кажется, что это просто переписывает js и css в абсолютные URL Greg Dean 12 лет назад 0
не важно, это был robots.txt, запрещающий мне обновлять ответ с помощью обходного пути Greg Dean 12 лет назад 1
Развернуто: `wget --adjust-extension --span-hosts --convert-links - резервное копирование-преобразование - page-реквизиты [url]` sam 11 лет назад 17
Или еще лучше: `wget --recursive --no-clobber - page-реквизиты --html-extension --convert-links --restrict-file-names = windows` [url] Petah 10 лет назад 2
@ ! = На [NC]` `RewriteRule ^ / (. *) Https://127.0.0.1:5601/$1 [R = 301, L]`, и это не работает. Он все еще перенаправляет меня на "Работает" страницу по умолчанию apache (((и как попробовать файл? Tim 9 лет назад 0
7
Ernie Dunbar

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

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

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

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

Это, вероятно, будет сканировать весь сайт с его под-URL 4253wyerg4e 6 лет назад 0
2
quack quixote

Похоже, 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 15 лет назад 0
да, синтаксический анализ CSS является новым в wget v1.12, он находится вверху журнала изменений: http://freshmeat.net/urls/376000c9c7a02f7a3592180c2390ff04 quack quixote 15 лет назад 0
Попробуйте добавить опцию -H в список. Он обозначает --span-hosts и позволяет загружать контент с внешних хостов. Michael 14 лет назад 0
2
webjay

Я сделал 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

Похожие вопросы