Проблеми з використанням wget або httrack для дзеркального архіву веб-сайту


12

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

Ось веб-сайт

http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/

Я не хочу, щоб усі сторінки починалися web.archive.org, але я хочу, щоб усі сторінки починалися http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/.

Коли я використовую wget -r, у своїй файловій структурі я знаходжу

web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/index.html,

але у мене немає всіх файлів, що входять до цієї бази даних, наприклад

web.archive.org/web/20110808041151/http://cst-www.nrl.navy.mil/lattice/struk/d0c.html.

Можливо, httrack зробив би краще, але саме зараз це захоплює занадто багато.

Отже, якими засобами можна захопити локальну копію архівованого веб-сайту з Інтернет-архіву Wayback Machine?


Людина! Я спробував відобразити точно таку саму сторінку (і справді сердився, що я цього не зробив, коли оригінальний сайт був ще в Інтернеті, що було б набагато простіше). Я думаю, що проблема полягає в тому, що не всі файли доступні під час 20110722080716знімка, отже, -npопція wget не допоможе.
mpy

Ви перевіряли вручну, що сторінки, що відсутні, насправді архівовані? Archive.org не завжди архівує кожну окрему сторінку.
nitro2k01

Відповіді:


20

Хоча корисні, попередні відповіді не можуть чітко, надійно та повторно вирішити основне питання. У цій публікації ми коротко деталізуємо труднощі з кожним, а потім запропонуємо скромне httrackрішення.

Фон

Перш ніж ми дістанемося до цього, подумайте про те, щоб прочитати добре письмову відповідь mpy . У h [є | er] сумно занедбаному дописі, mpy суворо документує незрозумілу (і чесно сумнівну) архівну схему.

Не дивно, що це не дуже. Замість того, щоб сумлінно архівувати сайти в єдину директорію, The Wayback Machine ефемерно поширює один сайт через два або більше числових ідентифікаційних каталогів братів і сестер. Сказати, що це ускладнює дзеркальне відображення, було б суттєвим заниженням.

Розуміння жахливих підводних каменів, представлених цією схемою, є основою для розуміння неадекватності попередніх рішень. Давайте продовжимо це, чи не так?

Попереднє рішення 1: wget

Пов'язане питання StackOverflow "Відновити старий веб-сайт за межами waybackmachine" , мабуть, є найгіршим правопорушником у цьому плані, рекомендуючи wgetдля дзеркального відображення Wayback. Природно, що ця рекомендація є принципово невиправданою.

За відсутності складного зовнішнього переписування URL-адреси (наприклад, Privoxy), wgetне можна використовувати для надійного відображення сайтів, архівованих Wayback. Що стосується mpy деталей у розділі "Проблема 2 + Рішення", будь-який інструмент дзеркального відображення ви не маєте дозволяти неперехідно завантажувати лише URL-адреси, що належать цільовому сайту. За замовчуванням більшість дзеркальних інструментів транзитивно завантажують усі URL-адреси, що належать як цільовому сайту, так і сайтам, пов’язаним із цим сайтом, - що, в гіршому випадку, означає "весь Інтернет".

Конкретний приклад - це порядок. Під час дзеркального відображення прикладного домену kearescue.comваш інструмент дзеркального відображення повинен :

  • Включити всі відповідні URL-адреси https://web.archive.org/web/*/http://kearescue.com. Це активи, надані цільовим сайтом (наприклад, https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js).
  • Виключіть усі інші URL-адреси. Це активи, надані іншими веб-сайтами, лише пов'язаними з цільовим сайтом (наприклад, https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js).

Якщо не виключати такі URL-адреси, як правило, використовується весь або більшість Інтернет-архівів на той час, коли сайт був заархівований, особливо для сайтів, на яких розміщені зовнішні ресурси (наприклад, відео YouTube).

Це було б погано. Хоча wget дійсно забезпечують командний рядок --exclude-directoriesваріанти приймають один або кілька шаблонів , відповідних URL - адреси , які будуть виключено, це НЕ загальне призначення регулярних вирази; це спрощені глобуси, *синтаксис яких відповідає нулю або більше символів, виключаючи/ . Оскільки URL-адреси, які потрібно виключити, містять довільно багато /символів, wget їх не можна використовувати для вилучення цих URL-адрес, а отже, не можна використовувати для дзеркального відображення сайтів, архівованих Wayback. Період. Кінець нещасної історії.

Це питання публічно відоме з принаймні 2009 року. Це ще не вирішено. Далі!

Попереднє рішення 2: Записка

Prinz рекомендує ScrapBookплагін Firefox. Плагін Firefox.

Це, мабуть, було все, що вам потрібно було знати. У той час як ScrapBook«S Filter by String...функціональність робить адреса вищезгаданої" Проблема 2 + Рішення, "це НЕ адреса подальшого" Проблема 3 + Рішення " , а саме - проблема сторонніх дублів.

Сумнівно, чи ScrapBookадекватно вирішується колишня проблема. Як визнає mpy :

Хоча записках поки що не вдалося повністю захопити сайт ...

Ненадійні та надмірно спрощені рішення - це не рішення. Далі!

Попереднє рішення 3: wget + Privoxy

mpy тоді забезпечує надійне рішення, використовуючи як wgetі Privoxy. Хоча wget це досить просто налаштувати, Privoxyщо - небудь , але розумно. Або просто.

Через неправдиву технічну перешкоду належної установки, налаштування та використання Privoxyми ще не повинні підтвердити рішення mpy . Це повинно працювати масштабовано, надійно. Зважаючи на перешкоди для входу, це рішення, ймовірно, більше підходить для масштабної автоматизації, ніж середній веб-майстер, який намагається відновити сайти малого та середнього масштабу.

Чи варто wget+ Privoxyподивитися? Абсолютно. Але більшість суперпользователей може бути краще обслуговуватися простішими, більш доступними рішеннями.

Нове рішення: httrack

Enter httrack- утиліта командного рядка, що реалізує набір wgetфункцій дзеркального відображення. httrackпідтримує виключення URL-адрес на основі шаблону та спрощену реструктуризацію сайту. Колишній вирішує mpy 's "Проблема 2 + Рішення"; останнє, "Проблема 3 + рішення".

У наведеному нижче абстрактному прикладі замініть:

  • ${wayback_url}за URL-адресою каталогу верхнього рівня, що архівує цілісний цільовий сайт (наприклад, 'https://web.archive.org/web/20140517175612/http://kearescue.com').
  • ${domain_name}тим самим доменним іменем, що ${wayback_url}виключається з префіксом http://(наприклад, 'kearescue.com').

Ось і ми. Встановіть httrack, відкрийте вікно терміналу cdв локальний каталог, в який ви хочете завантажити ваш сайт, і запустіть таку команду:

httrack\
    ${wayback_url}\
    '-*'\
    '+*/${domain_name}/*'\
    -N1005\
    --advanced-progressinfo\
    --can-go-up-and-down\
    --display\
    --keep-alive\
    --mirror\
    --robots=0\
    --user-agent='Mozilla/5.0 (X11;U; Linux i686; en-GB; rv:1.9.1) Gecko/20090624 Ubuntu/9.04 (jaunty) Firefox/3.5'\
    --verbose

Після завершення поточний каталог повинен містити один підкаталог для кожного файлу, відображеного з цієї URL-адреси. Зазвичай це включає щонайменше:

  • css, що містить усі дзеркальні таблиці стилів CSS.
  • html, що містить усі дзеркальні HTML-сторінки.
  • js, що містить весь дзеркальний JavaScript.
  • ico, що містить один дзеркальний фавікон.

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

Це воно. Ніяких зовнішніх викривлень, схильності до перезапису URL-адрес або проксі-серверів на основі правил не потрібно.

Насолоджуйтесь, товариші суперюзери.


Я радий почути, що хоча б одна людина ретельно прочитала мою відповідь. І дякую за ваш подальший аналіз та рішення httrack. +1
mpy

1
Рішення httrack було ідеальним, велике спасибі!
ChrisChinchilla

Раді, що вам допоможуть незначну допомогу, хлопці. З огляду на те, наскільки страшенно жахливий цей гобелен про горе та обман, я просто повинен був поділитися своїми висновками.
Сесіль Карі

Щоб зняти ліміт передачі швидкості, додайте ці параметри: - відключити-обмеження безпеки - max-rate = 0
Освальдо,

7

На жаль, жодна з відповідей не змогла вирішити проблему створення повного дзеркала з архівованого веб-сайту (не дублюючи кожен файл десятки разів). Тож я зламав разом інший підхід. Зламане - це важливе слово, оскільки моє рішення не є ні загальним, ні дуже простим (читати: копіювати та вставляти). Я використовував Privoxy Proxy Server, щоб переписати файли під час руху під час дзеркального відображення за допомогою wget.

Але по-перше, що так складно в дзеркальному відображенні від машини « Шлях назад» ?

Проблема 1 + Рішення

Панель інструментів Wayback зручна для інтерактивного використання, але може заважати wget. Тож позбудьтесь цього за допомогою правила фільтра привокси

FILTER: removewaybacktoolbar remove Wayback toolbar
s|BEGIN WAYBACK TOOLBAR INSERT.*END WAYBACK TOOLBAR INSERT|Wayback Toolbar removed|s

Завдання 2 + Рішення

Я хотів захопити весь сайт, тому потрібна була не надто мала глибина рекурсії. Але я не хочу, щоб wget сканував весь сервер. Зазвичай для цього ви використовуєте не-батьківський варіант -npwget. Але це не спрацює тут, бо ти хочеш потрапити

http://web.archive.org/web/ 20110722080716 /http://cst-www.nrl.navy.mil/lattice/struk/hcp.html

але також

http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

(помітьте змінену мітку часу в шляхах). Якщо пропустити, -npто Wget сканує до кінця (...)http://cst-www.nrl.navy.milі, нарешті, отримує весь navi.milсайт. Я точно не хочу цього! Отже, цей фільтр намагається імітувати -npповедінку за допомогою машини Wayback:

FILTER: blocknonparentpages emulate wget -np option
s|/web/([0-9].*)/http://cst-www.nrl.navy.mil/lattice/|THIS_IS_A_GOOD_$1_ADDRESS|gU
s|/web/(.*)/http(.*)([" ])|http://some.local.server/404$3|gU
s|THIS_IS_A_GOOD_(.*)_ADDRESS|/web/$1/http://cst-www.nrl.navy.mil/lattice/|gU

Я залишу це як вправу копатися в синтаксисі. Що цей фільтр робить наступне: Він замінює весь Вайбак URL , як http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/з http://some.local.server/404тих пір , як вони НЕ містять http://cst-www.nrl.navy.mil/lattice/.

Ви повинні підкоригуватися http://some.local.server/404. Це надіслати wget помилку 404. Можливо, privoxy може зробити це більш елегантно. Однак найпростішим способом для мене було лише переписати посилання на неіснуючу сторінку на локальному http-сервері, тому я затримався з цим.

І, ви також повинні налаштувати обидва входження з http://cst-www.nrl.navy.mil/lattice/відобразити сайт , який ви хочете дзеркало.

Завдання 3 + Рішення

І нарешті, деякі архівовані версії сторінки можуть посилатися на сторінку в іншому знімку. І це до ще одного. І так далі ... і ви закінчитеся з великою кількістю знімків однієї сторінки - і wget ніколи не встигне закінчити, доки він не знайде всі знімки. Я цього теж не хочу! Тут дуже допомагає, що машина Wayback дуже розумна. Ви можете запросити файл

http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

навіть якщо він не включений у 20110801041529знімок. Він автоматично перенаправить вас на правильний:

http://web.archive.org/web/ 20110731225728 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

Отже, ще один фільтр privoxy, щоб переписати всі знімки на останній

FILTER: rewritewaybackstamp rewrite Wayback snapshot date
s|/([0-9]{14})(.{0,3})/|/20120713212803$2/|g

Ефективно кожне 14-розрядне число, додане до цього, /.../замінюється 20120713212803(підкоригуйте його до останнього знімка потрібного сайту). Це може бути проблемою, якщо в структурі сайту є такі числа, що не походять з машини Wayback. Не ідеально, але чудово для сайту Strukturtypen .

Приємно в тому, що wget ігнорує нове місце, на яке він перенаправлений, і зберігає файл - у вищевказаному іспиті - як web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html.

Використання wget для дзеркального архіву сайту

Отже, нарешті, з цими привокси-фільтрами (визначеними в user.filter) увімкнено user.actionчерез

{ +filter{removewaybacktoolbar} +filter{blocknonparentpages} +filter{rewritewaybackstamp} }
web.archive.org

ви можете використовувати wget як завжди. Не забудьте сказати wget використовувати проксі:

export http_proxy="localhost:8118"
wget -r -p -k -e robots=off http://web.archive.org/web/20120713212803/http://cst-www.nrl.navy.mil/lattice/index.html

Я використовував ці варіанти, але теж -mповинен працювати. Ви закінчите папки

20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_

оскільки машина Wayback розділяє зображення ( im_), аркуші стилів ( cs_) тощо ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice. Але це насправді не потрібно.


1
Це була неоціненна відповідь. Ваше чітке розсічення внутрішньої структури веб-сайту The Wayback Machine було важливим для рішення на базі httrack, на яке я врешті-решт натрапив. Ти рок, мпі.
Сесіль Карі

5

wget

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

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

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

-m
--mirror

Увімкніть варіанти, що підходять для дзеркального відображення. Ця опція вмикає рекурсію та відмітку часу, встановлює нескінченну глибину рекурсії та зберігає списки каталогів FTP. Наразі це еквівалентно -r -N -l inf --no-remove-listing.

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

wget -E -H -k -K -p http://<site>/<document>

Так wget -E -H -k -K -p http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice буде для вас найкращим костюмом. Але я рекомендую інший інструмент, firefoxрозширенняscrapbook

записка

ScrapBook - це розширення Firefox, яке допомагає вам зберігати веб-сторінки та легко керувати колекціями. Ключові особливості - це легкість, швидкість, точність та багатомовна підтримка. Основними функціями є:
* Збереження веб-сторінки
* Збереження фрагменту веб-сторінки
* Збереження веб-сайту
* Організація колекції так само, як закладки
* Повний текст пошуку та швидка фільтрація пошуку колекції
* Редагування зібраної веб-сторінки
* Текст / HTML редагувати функцію, що нагадує Примітки Opera

Як відобразити дзеркальний сайт.
Встановити записку та перезапустити Firefox

  1. Завантажити сторінку у веб-переглядачі [дзеркальна веб-сторінка]
  2. Клацніть правою кнопкою миші на сторінці -> Зберегти сторінку як ...
  3. виберіть рівень із Поглиблення Зберегти та натисніть Зберегти введіть тут опис зображення
  4. вибрати Restrict to Drirectory/ Domainз Фільтр
    введіть тут опис зображення

Зачекайте, поки дзеркальне завершення завершиться. Після дзеркального відображення ви можете отримати доступ до веб-сайту в автономному режимі з ScrapBookменю.


Незважаючи на те, що Scrapbook не вдалося повністю захопити сайт, він був ближче до можливого рішення, ніж інші пропозиції. Особливо варіант " Filter by String ... " був кориснішим, ніж фільтрувати за хостом / доменом. Отже, я присуджую вам нагороду:)
mpy

0

Будьте обережні з наведеною нижче командою, тому що вона захоплює багато. Значок 1 після 'l' повідомляє йому захопити всі сторінки для посилань на сайті, які є глибиною 1 рівня. Якщо ви хочете, щоб він павук глибше змінив це на 2, але це ніколи не закінчиться, тому що він може потрапити в цикл.

wget -rHpkl 1 -e robots=off http://www.example.com/

Я не впевнений, які саме частини веб-сайту ви хочете зберегти та які саме частини вас не цікавлять, але вам, мабуть, слід додати білий список та / або чорний список різних частин сайту, щоб отримати лише те, що ви хочете, і запобігти собі завантаження всього з archive.org або Інтернету.

Використовуйте -D www.examle.com,www.another.example.comу списку лише ті домени, які ви хочете, або використовуйте --exclude-domains www.examle.com,www.another.example.com для чорного списку те, що не хочете.


Дякую, але проблема з білим / чорним списком полягає в тому, що всі архівовані веб-сайти надходять від web.archive.orgхоста. Я хочу віддзеркалити все те wget -np, що відображалося б, якби оригінальний сайт був ще в Інтернеті. -lтакож не дуже допомагає, оскільки його потрібно збільшити до 3 або 4, отже, внаслідок цього занадто сильно зростає ієрархія веб-сайтів.
mpy

0

Формат URL-адрес Інтернет-архіву включає дату та час, коли сайт був заархівований. Для економії космічних ресурсів, які не змінилися, пов'язуються з попередньою версією сайту.

Наприклад, у цій URL-адресі http://web.archive.org/web/20000229123340/http://www.yahoo.com/ дата сканування сайту була 29 лютого 2000 року о 12:33 та 40 секунд.

Тож, щоб отримати все, http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/що потрібно, потрібно почати з цього, але також захопити всі пов'язані активи http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/.


Саме в цьому і полягає проблема. Скажімо, сторінка A посилається на B. Отже, поточна версія A посилається на стару версію B. Але B включає також посилання на A. Отже, стара версія A також отримується і знову посилається на більш стару версію. Це (на (необхідній) глибині сканування 4) призводить до того, що ви отримуєте десятки версій сторінки покажчика, але не всіх потрібних файлів.
mpy

0

Вже є інструмент, який робить це краще:

wayback_machine_downloader domain.org 

Для його отримання потрібно встановити рубін. І потім:

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