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

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

5 ответов5

19

Несмотря на свою полезность, предыдущие ответы не в состоянии кратко, надежно и многократно решить основной вопрос. В этом посте мы кратко расскажем о трудностях с каждым из них, а затем предложим скромное решение на основе 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: записки

Prinz рекомендует 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

Введите 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-адресов или прокси-серверы на основе правил.

Наслаждайтесь, коллеги-суперпользователи.

5

К сожалению, ни один из ответов не смог решить проблему создания полного зеркала из заархивированного веб-сайта (без дублирования каждого файла десятки раз). Поэтому я взломал другой подход. Взломанное является важным словом, так как мое решение не является ни общим решением, ни очень простым (читай: копировать и вставить). Я использовал 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 сканировал весь сервер. Обычно для этой цели вы используете опцию no-parent -np в wget. Но это не сработает, потому что вы хотите получить

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-адреса Wayback, например 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) соответственно. Но это на самом деле не обязательно.

4

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-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 .

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/ .

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 для внесения в черный список того, что вы не делаете хочу.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .