Я пытаюсь использовать 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?
решение1
Хотя предыдущие ответы были полезны, они не смогли лаконично, надежно и повторяемо решить основной вопрос. В этом посте мы кратко описываем трудности с каждым из них, а затем предлагаем скромное httrack
решение на основе -.
Фон
Однако прежде чем мы перейдем к этому, рассмотрим следующее:мпйхорошо написанный ответ. В его[ис|ере] печально забытом посте,мпйтщательно документирует малоизвестную (и честно говоря запутывающую) архивную схему Wayback Machine.
Неудивительно, что это некрасиво.Вместо того, чтобы разумно архивировать сайты в один каталог, The Wayback Machine эфемерно распределяет один сайт по двум или более численно идентифицированным родственным каталогам. Сказать, что это усложняет зеркалирование, было бы существенным преуменьшением.
Понимание ужасных ловушек, представленных этой схемой, является основой для понимания неадекватности предыдущих решений. Давайте продолжим, ладно?
Предыдущее решение 1: wget
Соответствующий вопрос StackOverflow«Восстановить старый сайт с waybackmachine»вероятно, худший нарушитель в этом отношении, рекомендуя wget
Wayback mirroring. Естественно, эта рекомендация в корне неверна.
При отсутствии сложной внешней перезаписи 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
функциональностьFilter by String...
делаетрешить вышеупомянутую «Проблему 2 + Решение», это такнетрассмотреть последующую «Проблему 3 + Решение», а именно проблему посторонних дубликатов.
Сомнительно, что это ScrapBook
хотя бы адекватно решает первую проблему.мпйпризнает:
Хотя Scrapbook пока не удалось полностью захватить сайт...
Ненадежные и слишком упрощенные решения — это не решения. Далее!
Предыдущее решение 3: wget + Privoxy
мпйзатем обеспечивает надежное решение, использующее как wget
и Privoxy
. В то время какwget
являетсядостаточно просто настроить, Privoxy
но не разумно. Или просто.
Из-за непреодолимых технических трудностей правильной установки, настройки и использования Privoxy
нам еще предстоит подтвердитьмпйрешение. Этодолженработать масштабируемым, надежным образом. Учитывая барьеры для входа, это решение, вероятно, больше подходит для крупномасштабной автоматизации, чем для среднего веб-мастера, пытающегося восстановить сайты малого и среднего масштаба.
Стоит ли смотреть wget
+ ?Privoxy
Абсолютно.Однако большинству суперпользователей могли бы подойти более простые и легко применимые решения.
Новое решение: httrack
Введите httrack
, утилиту командной строки, реализующую расширенный набор wget
функций зеркалирования . httrack
поддерживает как исключение URL на основе шаблонаиУпрощенная реструктуризация сайта. Первый решаетмпй«Проблема 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 или прокси-серверов на основе правил не требуется.
Наслаждайтесь, уважаемые суперпользователи.
решение2
К сожалению, ни один из ответов не смог решить проблему создания полного зеркала из архивного веб-сайта (без дублирования каждого файла десятки раз). Поэтому я придумал другой подход.Взломанныйэто важное слово, так как мое решение не является ни общим, ни очень простым (читай: копировать и вставить). Я использовалПрокси-сервер Privoxyпереписать файлына летупри зеркалировании с помощью wget.
Но сначала, что такого сложного в зеркальном отображенииМашина Wayback?
Задача 1 + Решение
Панель инструментов Wayback удобна для интерактивного использования, но может мешать wget. Так что избавьтесь от нее с помощью правила фильтра privoxy
FILTER: removewaybacktoolbar remove Wayback toolbar
s|BEGIN WAYBACK TOOLBAR INSERT.*END WAYBACK TOOLBAR INSERT|Wayback Toolbar removed|s
Задача 2 + Решение
Я хотел захватить весь сайт, поэтому нужна была не слишком маленькая глубина рекурсии. Но я не хочу, чтобы wget сканировал весь сервер. Обычно вы используетебезродительскийвариант -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
) соответственно. Но это не так уж и необходимо.
решение3
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-listing.
Обратите внимание, что Wget будет вести себя так, как будто указана опция -r, но будет загружена только эта страница и ее реквизиты. Ссылки с этой страницы на внешние документы не будут переходить. На самом деле, чтобы загрузить одну страницу и все ее реквизиты (даже если они существуют на отдельных веб-сайтах) и убедиться, что все это отображается правильно локально, этот автор любит использовать несколько опций в дополнение к -p:
wget -E -H -k -K -p http://<site>/<document>
SO 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's Notes
Как создать зеркало сайта
Установитьальбом для вырезок и перезапустите Firefox
- Загрузить страницу в браузере [веб-страница для зеркалирования]
- Щелкните правой кнопкой мыши по странице -> Сохранить страницу как...
- выберите уровень изВ глубине Сохранить и нажмите сохранить
- выберите
Restrict to Drirectory
изDomain
Фильтр
Дождитесь завершения зеркалирования. После зеркалирования вы сможете получить доступ к веб-сайту в автономном режиме из ScrapBook
меню.
решение4
Формат 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/
.