Как вы используете wget (с опцией mk) для зеркалирования сайта и его внешних ссылок? - PullRequest
3 голосов
/ 09 марта 2011

Я знаю о wget -mkp http://example.com для зеркалирования сайта и всех его внутренних файлов.

Но мне нужно сделать резервную копию сайта, где все изображения хранятся наотдельный домен.Как я могу также загрузить эти изображения с помощью wget и соответствующим образом обновить теги src?

Спасибо!

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Немного измененная версия ответа @ PatrickHorn:

Сначала cd в верхний каталог, содержащий загруженные файлы.

"первый wget для поиска страниц рекурсивно, хотя только из этого одного домена"

wget --recursive --timestamping -l inf --no-remove-listing --page-requisites http://site.com

"второй wget, который охватывает хосты, но не получает страницы рекурсивно»

find site.com -name '*.htm*' -exec wget --no-clobber --span-hosts --timestamping --page-requisites http://{} \;

Я пробовал это, иПохоже, это в основном сработало - я получаю все страницы .htm (l) только с сайта, за которым я работаю, затем внешние файлы.Мне еще не удалось изменить ссылки на локальные копии внешних файлов.

0 голосов
/ 09 марта 2011

wget с ключами -r и -H довольно опасен, поскольку может легко попасть на большой сайт (возможно, через рекламное окно или окно поиска) и охватить весь Интернет. Хитрость для загрузки всех зависимостей для одной страницы состоит в том, что вы не обязательно хотите рекурсию, но вы действительно хотите загрузить предварительные условия страницы, а также разрешить wget охватить хосты, как в:

wget -H -N -kp http://<site>/<document>

Однако, с помощью этой команды, теперь вы не получите рекурсивное поведение.

Таким образом, чтобы объединить их, мы можем использовать первый wget для рекурсивного поиска страниц, хотя только из этого одного домена; и второй wget, который охватывает хосты, но не получает рекурсивные страницы:

wget -mkp http://example.com
find example.com/ -name '*.html*' -exec wget -nc -HNkp http://{} \;

Важным моментом является -nc - он сообщает wget действовать так, как будто он скачал его с сервера, но вместо этого использует локальную копию на вашем диске, что означает, что ссылки должны быть уже преобразованы. Далее он извлечет все ресурсы; и, наконец, он должен закрыть исходный файл (для которого требуется строка запроса) и правильно назвать второй. Обратите внимание, что этот файл дважды загружает файл, чтобы он мог исправить - однако место, где я застрял - -k, преобразует относительные URL, которые он не загружал, обратно в абсолютные URL. Поэтому после второго шага все ссылки теперь снова являются удаленными URL.

К счастью, эту проблему немного проще решить вручную, потому что все абсолютные ссылки должны начинаться с "http://example.com/",, так что может быть возможно запустить простой сценарий" sed "для исправления ссылок. .

Что бы я предложил, если вы знаете, что домены, которые вы ожидаете включить в example.com, это использовать опцию -D, чтобы указать только те домены, с которых вы ожидаете загрузку, и ничего больше. Например, с google.com вы также включаете gstatic.com.

Здесь есть еще один человек с аналогичным вопросом , но загрузка удаленных изображений, похоже, не решена.

В этой теме предлагается просто прикусить пулю и выполнить "-r -l 1 -H", но также использовать -A для ограничения файлов, которые фактически сохраняются в изображениях или типах css:

...