Проблемы с использованием wget или httrack для зеркалирования архивированного сайта
Я пытаюсь использовать 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 будет лучше, но сейчас это слишком много.
Итак, каким образом можно получить локальную копию заархивированного веб-сайта с машины архивирования Интернета?
7 ответов
Несмотря на полезность, предыдущие ответы не в состоянии кратко, надежно и многократно решить основной вопрос. В этом посте мы кратко расскажем о трудностях с каждым, а затем предложим скромный httrack
решение на основе
Фон
Прежде чем мы перейдем к этому, рассмотрим хорошо написанный ответ mpy. В своем посте, который печально игнорируется, mpy строго документирует неясную (и, честно говоря, запутывающую) архивную схему Wayback Machine.
Неудивительно, что это не красиво. Вместо разумного архивирования сайтов в один каталог, The Wayback Machine эфемерно распределяет один сайт по двум или более численно идентифицированным одноуровневым каталогам. Сказать, что это усложняет зеркалирование, было бы существенным преуменьшением.
Понимание ужасных ловушек, представленных этой схемой, является основой для понимания неадекватности предыдущих решений. Давай продолжим, ладно?
Предыдущее решение 1: wget
Соответствующий вопрос StackOverflow "Восстановить старый сайт с waybackmachine", вероятно, является худшим нарушителем в этом отношении, рекомендуя wget
для обратного отражения. Естественно, что эта рекомендация принципиально несостоятельна.
В отсутствие сложной внешней перезаписи 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
Войти 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-адресов или прокси-серверы на основе правил не требуются.
Наслаждайтесь, коллеги-суперпользователи.
К сожалению, ни один из ответов не смог решить проблему создания полного зеркала из заархивированного веб-сайта (без дублирования каждого файла десятки раз). Поэтому я взломал другой подход. Взломанный является важным словом, так как мое решение не является ни общим решением, ни очень простым (читай: копировать и вставить). Я использовал Privoxy Proxy Server для быстрой перезаписи файлов при зеркалировании с помощью 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
) соответственно. Но это на самом деле не обязательно.
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
- Загрузите страницу в браузер [веб-страница для зеркалирования]
- Щелкните правой кнопкой мыши на странице -> Сохранить страницу как...
- выберите уровень из глубины Сохранить и нажмите сохранить
- Выбрать
Restrict to Drirectory
/Domain
от фильтра
Дождитесь завершения зеркалирования. После зеркалирования вы можете получить доступ к веб-сайту в автономном режиме с ScrapBook
меню.
Уже есть инструмент, который делает это лучше:
wayback_machine_downloader domain.org
Чтобы получить его, вам нужно установить ruby. А потом:
gem install wayback_machine_downloader
Будьте осторожны с приведенной ниже командой, потому что она захватывает много. 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
в черный список того, что вы не хотите.
Формат 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/
,
Редактировать:
Я настоятельно рекомендую проект с открытым исходным кодом wayback-machine-downloader , о котором упоминает Eduard Florinescu , вместо httrack, поскольку неспособность httrack отсеивать копии с отметкой времени, предлагаемые на каждой странице archive.org, заставляет httrack загружать потенциально сотни копий различных версий каждой страницы. и каждый файл.
Оригинал:
Для httrack на *nix, BSD или OSX отличный ответ от Cecil Curry верен, за исключением кавычек - одинарные кавычки не расширяются:
foo="bar"
echo '${foo}'
> ${foo}
в то время как двойные кавычки сохраняют пробелы, но расширяются:
foo="bar"
echo "${foo}"
> bar
и расстояние до маркеров продолжения строки"\"
->" \"
.
Вот некоторый фиксированный код, просто не забудьте установить переменныеwayback_url=
на реальную страницу иdomain_name=
к исходному имени хоста сайта без http.
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