Заставьте wget конвертировать HTML ссылки в относительные после загрузки, если не указан ключ -k

32

-kВариант (или --convert-link) преобразует ссылки на веб - страницах , чтобы относительное после завершения загрузки, например, страница человек говорит:

После завершения загрузки преобразуйте ссылки в документе, чтобы сделать их пригодными для локального просмотра. Это влияет не только на видимые гиперссылки, но и на любую часть документа, которая ссылается на внешний контент, такой как встроенные изображения, ссылки на таблицы стилей, гиперссылки на контент, отличный от HTML, и т. Д.

Итак, если я не укажу -k, могу ли я запустить wgetснова после загрузки и исправить это, и если да, то какой будет правильная команда? Я думаю, wget -c [previous options used] [url]и запустить его в том же рабочем каталоге, в котором файл был загружен.

Натаниель
источник
1
Вы можете, конечно, пост-обработать файлы после загрузки, но я не знаю, wgetделает ли это. Ваша идея попробовать это -cхорошо. время экспериментировать!
шарлатан-кихот
У вас есть удобная утилита для конвертации ссылок? Кстати, работает на Windows ...
Натаниэль
perl... нет заранее написанного сценария, но если бы я хотел сделать решение «сделай сам», то это то, что я бы использовал
Quack Quixote
Хорошо спасибо. У вас не установлен Perl, и он займет слишком много времени. К счастью, я нашел способ заставить wget делать свою работу. Я отправил ответ.
Натаниэль
Кстати, ActivePerl используется как порт perl для Windows; это довольно маленький установщик, и я уверен, что большинство модулей CPAN работают с ним. activestate.com/activeperl
шарлатан-кихот

Ответы:

23

Да, вы можете сделать wgetэто. Я бы сказал, использовать wget -nc -k [previous options] [previous url]. -ncне клопбер Со страницы руководства:

Когда −ncуказано, это поведение подавляется, и Wget откажется загружать более новые копии файла.

А -kопция делает ссылку конвертирующей. Итак, wget начинает копаться на удаленном сервере, видит все файлы, которые у вас уже есть, отказывается их повторно загружать, а затем редактирует HTML-ссылки на относительные, когда это будет сделано. Ницца.

Натаниель
источник
3
Нет, это не работает для меня. Он скачивает первый файл (например, index.html), видит, что уже загружен стоп. Если вы хотите, чтобы wget работал рекурсивно, вы должны использовать опцию timestamp (-K). Поэтому wget должен запросить совпадение всех заголовков, если файл более новый или нет.
12
GNU Wget 1.13.3 построен на darwin11.1.0. Попытка использовать оба варианта одновременно даетBoth --no-clobber and --convert-links were specified,only --convert-links will be used.
Людовик Куты
2
разве ваш вопрос не задавался без -k?
Бароп
8
Ср Комментарий @ LudovicKuty - с wget 1.13 --no-clobberне работает --convert-links. См. Http://savannah.gnu.org/bugs/?31781 для деталей.
Дэвид Моулз
1
На случай, если кому-то все равно, я создал образ докера для wget 1.12: hub.docker.com/r/berezovskyi/wget1.12
berezovskyi