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

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

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

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

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

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

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

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

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

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

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

Это звучит как 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, чтобы получить их тоже.

Другие вопросы по тегам