Збережіть одну веб-сторінку (з фоновими зображеннями) за допомогою Wget


73

Я хочу використовувати Wget для збереження окремих веб-сторінок (не рекурсивно, не цілих сайтів) для довідок. Так само, як "Веб-сторінка Firefox, завершена".

Перша моя проблема: я не можу заставити Wget зберігати фонові зображення, вказані в CSS. Навіть якби це зберегло файли фонових зображень, я не думаю, що --convert-посилання перетворить URL-адреси фонового зображення у CSS-файл, щоб вказати на локально збережені фонові зображення. У Firefox така ж проблема.

Моя друга проблема: Якщо на сторінці є зображення, які я хочу зберегти, розміщені на іншому сервері (наприклад, в рекламі), ці звички не включатимуться. --span-господарі, здається, не вирішують цю проблему за допомогою рядка нижче.

Я використовую: wget --no-parent --timestamping --convert-links --page-requisites --no-directories --no-host-directories -erobots=off http://domain.tld/webpage.html


1
точно такий же рядок (wget --no-parent --timestamping --convert-links --page-requisites --no-каталоги --no-host-каталоги -erobots = off domain.tld) ​​фактично зберігає фонові зображення, на які посилається CSS після оновлення до 1.12. Посібник говорить: "За допомогою URL-адрес http: Wget отримує та аналізує html або css з даної URL-адреси, витягуючи файли, на які посилається документ, через розмітку, як href чи src, або значення css uri, визначені за допомогою функціоналу 'url ()' позначення ». Другу проблему ще потрібно вирішити
користувач14124

Відповіді:


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
Expanded: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]
Petah

@ {etah: Я спробував вашу команду з вашими аргументами, вона завантажить інші веб-сторінки, крім вказаної для неї.
Тім

7

wgetКоманда пропонує варіант --mirror, який робить те ж саме , як:

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

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

Ви, можливо, не змогли це знайти, якщо ви не використовуєте новітню версію wget.


1
Це, ймовірно, сканує весь веб-сайт з його URL-адресами
4253wyerg4e,

2

Це здається, що wgetFirefox не розбирає 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. Я все ще не знаю, як включити зображення, які є на інших серверах.
користувач14124

так, розбір CSS є новим у wget v1.12, він знаходиться у верхній частині журналу змін: freshmeat.net/urls/376000c9c7a02f7a3592180c2390ff04
quack quixote

Спробуйте додати в список опцію -H. Він розшифровується як --span-хости і дозволяє завантажувати вміст із зовнішніх хостів.
Майкл

2

Я зробив Вебтографію з подібною метою: 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.