Проблемы с использованием 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 будет лучше, но сейчас это слишком много.

Итак, каким образом можно получить локальную копию заархивированного веб-сайта с машины архивирования Интернета?

user695322
источник
Мужчина! Я попытался отразить ту же самую страницу (и действительно разозлился, что не сделал этого, когда оригинальный сайт все еще был в сети, что было бы намного проще). Я думаю, проблема в том, что не все файлы доступны под 20110722080716снимком, поэтому -npопция wget не поможет.
mpy
Вы проверяли вручную, что фактически отсутствующие страницы заархивированы? Archive.org не всегда архивирует каждую страницу.
nitro2k01

Ответы:

20

Несмотря на полезность, предыдущие ответы не в состоянии кратко, надежно и многократно решить основной вопрос. В этом посте мы кратко расскажем о трудностях с каждым из них, а затем предложим скромное httrackрешение.

Фон

Прежде чем мы перейдем к этому, рассмотрим хорошо написанный ответ mpy . К сожалению, в своем посте mpy строго документирует неясную (и, честно говоря, запутанную) архивную схему Wayback Machine.

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

Понимание ужасных ловушек, представленных этой схемой, является основой для понимания неадекватности предыдущих решений. Давай продолжим, ладно?

Предыдущее решение 1: wget

Связанный вопрос StackOverflow «Восстановить старый сайт с waybackmachine» , вероятно, является худшим нарушителем в этом отношении, рекомендуя wgetзеркалирование Wayback. Естественно, что эта рекомендация принципиально несостоятельна.

В отсутствие сложной перезаписи внешних URL-адресов (например, Privoxy) wgetнельзя использовать для надежного зеркалирования сайтов, заархивированных Wayback. Как МРУТ подробности в разделе «Проблема 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: записки

Принц рекомендует ScrapBook, плагин Firefox. Плагин Firefox.

Это было, вероятно, все, что вам нужно было знать. В то время как ScrapBook«S Filter by String...функциональность делает адрес вышеупомянутой„Проблема 2 + Решение,“это не адрес последующего„Проблема 3 + Решение“ , а именно - проблема посторонних дублей.

Сомнительно, ScrapBookдаже адекватно ли решает прежнюю проблему. Как признается mpy :

Хотя Scrapbook не удалось полностью захватить сайт ...

Ненадежные и чрезмерно упрощенные решения не являются решениями. Следующий!

Предыдущее решение 3: wget + Privoxy

Затем mpy предоставляет надежное решение, используя как wgetи Privoxy. Хотя wget это достаточно просто для настройки, Privoxyэто не разумно. Или просто.

Из-за непреодолимых технических препятствий для правильной установки, настройки и использования Privoxyнам еще предстоит подтвердить решение mpy . Он должен работать масштабируемым и надежным способом. Учитывая барьеры для входа, это решение, вероятно, больше подходит для крупномасштабной автоматизации, чем средний веб-мастер, пытающийся восстановить мелкие и средние сайты.

Есть wget+ Privoxyстоит посмотреть? Абсолютно. Но большинство суперпользователей могут быть лучше обслужены более простыми, более легко применимыми решениями.

Новое решение: httrack

Enter httrack, утилита командной строки, реализующая расширенный набор wgetфункций зеркального отображения. httrackподдерживает как исключение URL на основе шаблона, так и упрощенную реструктуризацию сайта. Первый решает mpy "Проблема 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
Рад быть малой помощью, ребята. Учитывая, как ужасно ужасен этот гобелен с горечью и обманом, я просто должен был поделиться своими выводами.
Сесил Карри
Чтобы убрать ограничение скорости передачи, добавьте следующие параметры: --disable-security-limit --max-rate = 0
Освальдо
7

К сожалению, ни один из ответов не смог решить проблему создания полного зеркала из заархивированного веб-сайта (без дублирования каждого файла десятки раз). Поэтому я взломал другой подход. Взломанное является важным словом, так как мое решение не является ни общим решением, ни очень простым (читай: копировать и вставить). Я использовал Privoxy прокси - сервер , чтобы переписать файлы на лету , а зеркальное отображение с Wget.

Но во-первых, что такого сложного в отражении от Wayback Machine ?

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

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

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

Проблема 2 + Решение

Я хотел запечатлеть весь сайт, поэтому мне нужна была небольшая глубина рекурсии. Но я не хочу, чтобы wget сканировал весь сервер. Обычно для этой цели вы используете опцию wget без родителей-np . Но это не сработает, потому что вы хотите получить

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. Это должно послать ошибку 404 в wget. Вероятно, 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 для зеркалирования заархивированного сайта

Итак, наконец, с этими фильтрами privoxy (определенными в 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_) и т. д., я объединил все вместе и использовал некоторую магию sed, чтобы соответственно заменить уродливые относительные ссылки ( ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice). Но это на самом деле не обязательно.

МРУ
источник
1
Это был бесценный ответ. Точное изучение внутренней структуры сайта The Wayback Machine стало ключом к решению на основе httrack, на которое я в конце концов наткнулся. Ты молодец, Мпи.
Сесил Карри
5

Wget

--page-Requisites
Этот параметр заставляет 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-list.

Обратите внимание, что 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меню.

Prinz
источник
Хотя Scrapbook не удалось полностью захватить сайт, он был ближе к возможному решению, чем другие предложения. Особенно его опция Filter by String ... была более полезной, чем фильтрация по хосту / домену. Следовательно, я присуждаю вам :)
награду
0

Будьте осторожны с приведенной ниже командой, потому что она захватывает много. 1 после 'l' говорит, что нужно захватить все страницы для ссылок на сайте, которые имеют глубину 1 уровень. Если вы хотите, чтобы паук глубже, измените это значение на 2, но оно может никогда не закончиться, потому что оно может попасть в цикл.

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

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

Используйте -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 

Чтобы получить его, вам нужно установить ruby. А потом:

gem install wayback_machine_downloader
Эдуард Флоринеску
источник