Як ви використовуєте WGET для дзеркального відображення на рівні 1 сайту в глибині, відновлення ресурсів JS, CSS, включаючи зображення CSS?


11

Прикидаюся, що я хотів, щоб проста копія сторінки була завантажена на мій HD для постійного зберігання. Я не шукаю глибокого рекурсивного отримання, лише одну сторінку, але також будь-які ресурси, завантажені цією сторінкою, які також потрібно завантажити.

Приклад: https://www.tumblr.com/

Очікуйте:

  • Index.html
  • Будь-які завантажені зображення
  • Будь-які завантажені файли JS
  • Будь-які завантажені файли CSS
  • Будь-які зображення, завантажені у файл CSS
  • посилання на ресурси сторінки, локалізовані для роботи із завантаженими копіями (відсутність веб-залежності)

Мені цікаво знати, чи можете ви допомогти мені знайти кращий синтаксис wget чи інший інструмент, який це зробить. Інструменти, які я намагався, зазвичай не отримують завантажені зображення CSS, тому сторінка ніколи не виглядає правильною, коли завантажується локально. Дякую!

Дотичне рішення

Я знайшов спосіб це зробити за допомогою FireFox. Збереження за замовчуванням порушено, і є додаток, який називається "Зберегти завершено", який, очевидно, може зробити гарну роботу з цим. Однак ви не можете завантажити його, оскільки він говорить, що він не підтримується в поточній версії FireFox. Причина полягає в тому, що він був згорнутий у цей додаток: "Формат архіву Mozilla". Встановіть це, тоді, коли ви використовуєте Файл> "Зберегти сторінку як ..", з'являється нова опція під назвою "Веб-сторінка, завершена", яка по суті є старим аддоном, який фіксує реалізацію акцій, яку FireFox використовує (що жахливо). Це не WGET-рішення, але воно забезпечує дієве рішення.

EDIT: Ще одне смішне питання для тих, хто, можливо, буде слідувати за цим питанням у майбутньому, намагаючись це зробити. Для того, щоб аддон працював належним чином, вам потрібно Інструменти> Формат архіву Mozilla та змінити (жахливий) параметр за замовчуванням "Зробити вірний знімок сторінки" на "Зберегти сценарії та джерело за допомогою Save Complete", інакше аддон спорожнить усіх ваші файли сценаріїв і замініть їх текстом "/ * Сценарій видалений знімком зберегти * /".


file> save as firefox або інший браузер завантажить усі зображення, js та css файли
user31113

Ви дійсно хочете, щоб файли, або ви просто хочете правильно винесене версію сторінки?

Я хочу, щоб файли, як би там не було, потрібно було б правильно візуалізувати сторінку. Якби у вас їх не було, це виглядало б інакше. Файл> Зберегти як не працює у Firefox. Якщо ви це зробите, ви не отримаєте зображення css. Спробуйте це на tumblr.com/login . Фонове зображення відсутнє, bg зображення для полів введення відсутні.

Жодне рішення wget не працювало для мене. My Tangent Solution - найкращий метод для досягнення такого роду збереження сайту. Однак я бачив, що це не вдається на дуже складних сторінках, таких як apple.com , імовірно, тому, що багато шляхів до ресурсів динамічно генеруються шляхом виконання javascript, деякі не відразу, але під час виконання якого-небудь ajax.
Лана Міллер

Відповіді:


12

wget -p -k http://ExampleSite.com

-P отримає всі необхідні елементи для правильного перегляду сайту (css, зображення тощо). The -k змінить усі посилання (включаючи такі, що стосуються CSS та зображень), щоб дозволити переглядати сторінку в режимі офлайн, як вона з’явилася в Інтернеті.

Оновлення: Це специфічно для вашого прикладу веб-сайту: tumblr.com

wget -H -N -k -p --exclude-domains quantserve.com --no-check-certificate -U "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110613 Firefox/6.0a2" https://www.tumblr.com

Розбивка:

-H = Дозволяє wget переходити до іноземного хоста. Необхідно, оскільки tumblr не має своїх зображень на головній сторінці за тією ж адресою, вони використовують safe.assets.tumblr.com див. Примітку про виключення доменів

-N = буде захоплювати лише ті файли, які новіші, ніж у вас зараз, якщо ви знову завантажуєте ту саму сторінку

-k = конвертуйте ваші посилання, щоб правильно їх переглядати в режимі офлайн

-p = захоплює всі необхідні елементи для правильного його перегляду (css, зображення тощо)

--exclude-domeins = оскільки на домашній сторінці tumblr.com є посилання на Quantserve.com, і я здогадуюсь, що ви не хочете цього матеріалу, його потрібно виключити з завантаження wget. Примітка . Це досить важливий варіант, який ви повинні використовувати з -H, оскільки якщо ви перейдете на сайт і на них є кілька посилань для зовнішніх хостів (думайте, рекламодавці та аналітичні матеріали), ви також збираєтеся захопити цей матеріал!

- no-check-сертифікат необхідний, оскільки tumblr використовує https

-U змінює користувальницький агент. Насправді це не потрібно в цьому випадку, оскільки він дозволяє користувачеві агенти wget за замовчуванням, але я знаю, що деякі сайти будуть блокувати його. Я просто кинув його сюди, щоб у випадку, якщо у вас виникли проблеми на інших сайтах. У прикладі фрагмента, який я дав, він відображається як Mozilla Firefox 6.02a

нарешті у вас є сайт: https://www.tumblr.com


1
Я спробував це, не отримав жодного JS, CSS чи файлів зображень. Ти що?

Якщо ви використовуєте його на tumblr (ваш приклад вище), можливо, вам доведеться вказати --no-check-сертифікат.

Я думаю, ти маєш рацію, можливо, такий варіант потрібен. Проте нічого, крім index.html, однак. Щось не вистачає ...

@LanaMiller Я оновив свою відповідь. Повідомте мене, якщо є якісь проблеми.

Ви не можете зробити щось на кшталт -exclude-domeins! = Tumblr.com?
альфа1

3

Для конкретного веб-сайту, про який ви згадали, та багатьох інших кодованих програм, таких як wget (і згортання), просто не буде працювати. Проблема полягає в тому, що деякі посилання на ресурси, необхідні для візуалізації сторінки у веб-переглядачі, створюються через javascript. У Wget є запит на функцію, що очікує на запуск JavaScript:

http://wget.addictivecode.org/FeatureSpecifications/JavaScript

Однак поки це не завершиться, веб-сайти, які створюють посилання на об’єкти за допомогою JavaScript, не будуть клонувати за допомогою wget. Найпростіше рішення - знайти інструмент, який насправді створює DOM та аналізує JavaScript, як движок браузера (тобто метод, який ви згадували).


1

Ви також можете зробити це автоматично (або програмно, якщо ви робите кодування), видавши команду через оболонку за допомогою wget:

wget --convert-links -r http://www.yourdomain.com

Він завантажить сторінку та внутрішні файли та зробить посилання локальними.


1
Це отримає все . Прочитайте питання.
Євгеній

-1
wget -r http://www.example.com

Я думаю, що це схопить все, але дай постріл і дізнайся.


1
Він отримує все, що дуже багато. Поки що знайдене нами рішення FireFox є найкращим робочим рішенням. Він отримує те, що потрібно, і більше нічого.

-1

$ ( man wget ):

-п

- сторінка-реквізити

Цей параметр змушує Wget завантажити всі файли, необхідні для правильного відображення даної HTML-сторінки. Сюди входять такі елементи, як вкладені зображення, звуки та посилання на таблиці стилів.

Зазвичай під час завантаження однієї сторінки HTML будь-які необхідні документи, які можуть знадобитися для її належного відображення, не завантажуються. Використання -r разом з -l може допомогти, але оскільки Wget зазвичай не розрізняє зовнішні та вкладені документи, як правило, залишаються "листові документи", у яких відсутні їхні реквізити.

Наприклад, документ 1.html містить тег "<IMG>", що посилається на 1.gif, і тег "<A>", що вказує на зовнішній документ 2.html. Скажіть, що 2.html схожий, але його зображення - 2.gif і посилається на 3.html. Скажімо, це продовжується до деякої довільно високої кількості.

Якщо хтось виконує команду:

wget -r -l 2 http: // <сайт> /1.html

тоді будуть завантажені 1.html, 1.gif, 2.html, 2.gif і 3.html. Як бачите, 3.html не потребує 3.gif, оскільки Wget просто підраховує кількість хмелів (до 2) від 1.html, щоб визначити, де зупинити рекурсію. Однак за допомогою цієї команди:

wget -r -l 2 -p http: // <сайт> /1.html

всі вищезазначені файли та 3.html реквізит 3.gif будуть завантажені. Аналогічно

wget -r -l 1 -p http: // <сайт> /1.html

призведе до завантаження файлів 1.html, 1.gif, 2.html та 2.gif. Можна подумати, що:

wget -r -l 0 -p http: // <сайт> /1.html

завантажували б лише 1.html та 1.gif, але, на жаль, це не так, оскільки -l 0 еквівалентно -l inf ---, тобто нескінченна рекурсія. Щоб завантажити одну сторінку HTML (або ж декілька їх, всі вказані в командному рядку або у вхідному файлі -i URL) та його (або їх) реквізити, просто залиште -r і -l:

wget -p http: // <сайт> /1.html

Зауважте, що Wget буде поводитись так, ніби було вказано -r, але завантажуватиметься лише ця одна сторінка та її реквізити. Посилання з цієї сторінки на зовнішні документи не переглядаються. Власне, для завантаження однієї сторінки та всіх її реквізитів (навіть якщо вони існують на окремих веб-сайтах) та переконайтеся, що партія відображається належним чином на локальному рівні, цей автор любить використовувати додаткові параметри на додаток до -p:

wget -E -H -k -K -p http: // <сайт> / <документ & gt ;

Щоб закінчити цю тему, варто знати, що ідея Віджета про зовнішнє посилання документа - це будь-яка URL-адреса, вказана в тезі "<A>", тегу "<AREA>" або тезі "<LINK>", крім "< LINK REL = "таблиця стилів"> ".


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