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

7854
user695322

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

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

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

5 ответов на вопрос

16
Cecil Curry

While helpful, prior responses fail to concisely, reliably, and repeatably solve the underlying question. In this post, we briefly detail the difficulties with each and then offer a modest httrack-based solution.

Background

Before we get to that, however, consider perusing mpy's well-written response. In h[is|er] sadly neglected post, mpy rigorously documents the Wayback Machine's obscure (and honestly obfuscatory) archival scheme.

Unsurprisingly, it ain't pretty. Rather than sanely archiving sites into a single directory, The Wayback Machine ephemerally spreads a single site across two or more numerically identified sibling directories. To say that this complicates mirroring would be a substantial understatement.

Understanding the horrible pitfalls presented by this scheme is core to understanding the inadequacy of prior solutions. Let's get on with it, shall we?

Prior Solution 1: wget

The related StackOverflow question "Recover old website off waybackmachine" is probably the worst offender in this regard, recommending wget for Wayback mirroring. Naturally, that recommendation is fundamentally unsound.

In the absence of complex external URL rewriting (e.g., Privoxy), wget cannot be used to reliably mirror Wayback-archived sites. As mpy details under "Problem 2 + Solution," whatever mirroring tool you choose must allow you to non-transitively download only URLs belonging to the target site. By default, most mirroring tools transitively download all URLs belonging to both the target site and sites linked to from that site – which, in the worst case, means "the entire Internet."

A concrete example is in order. When mirroring the example domain kearescue.com, your mirroring tool must:

  • Include all URLs matching https://web.archive.org/web/*/http://kearescue.com. These are assets provided by the target site (e.g., https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js).
  • Exclude all other URLs. These are assets provided by other sites merely linked to from the target site (e.g., https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js).

Failing to exclude such URLs typically pulls in all or most of the Internet archived at the time the site was archived, especially for sites embedding externally-hosted assets (e.g., YouTube videos).

That would be bad. While wget does provide a command-line --exclude-directories option accepting one or more patterns matching URLs to be excluded, these are not general-purpose regular expressions; they're simplistic globs whose * syntax matches zero or more characters excluding /. Since the URLs to be excluded contain arbitrarily many / characters, wget cannot be used to exclude these URLs and hence cannot be used to mirror Wayback-archived sites. Period. End of unfortunate story.

This issue has been on public record since at least 2009. It has yet to be be resolved. Next!

Prior Solution 2: Scrapbook

Prinz recommends ScrapBook, a Firefox plugin. A Firefox plugin.

That was probably all you needed to know. While ScrapBook's Filter by String... functionality does address the aforementioned "Problem 2 + Solution," it does not address the subsequent "Problem 3 + Solution" – namely, the problem of extraneous duplicates.

It's questionable whether ScrapBook even adequately addresses the former problem. As mpy admits:

Although Scrapbook failed so far to grab the site completely...

Unreliable and overly simplistic solutions are non-solutions. Next!

Prior Solution 3: wget + Privoxy

mpy then provides a robust solution leveraging both wget and Privoxy. While wget is reasonably simple to configure, Privoxy is anything but reasonable. Or simple.

Due to the imponderable technical hurdle of properly installing, configuring, and using Privoxy, we have yet to confirm mpy's solution. It should work in a scalable, robust manner. Given the barriers to entry, this solution is probably more appropriate to large-scale automation than the average webmaster attempting to recover small- to medium-scale sites.

Is wget + Privoxy worth a look? Absolutely. But most superusers might be better serviced by simpler, more readily applicable solutions.

New Solution: httrack

Enter httrack, a command-line utility implementing a superset of wget's mirroring functionality. httrack supports both pattern-based URL exclusion and simplistic site restructuring. The former solves mpy's "Problem 2 + Solution"; the latter, "Problem 3 + Solution."

In the abstract example below, replace:

  • $ by the URL of the top-level directory archiving the entirety of your target site (e.g., 'https://web.archive.org/web/20140517175612/http://kearescue.com').
  • $ by the same domain name present in $ excluding the prefixing http:// (e.g., 'kearescue.com').

Here we go. Install httrack, open a terminal window, cd to the local directory you'd like your site to be downloaded to, and run the following command:

httrack\ $\ '-*'\ '+*/$/*'\ -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 

On completion, the current directory should contain one subdirectory for each filetype mirrored from that URL. This usually includes at least:

  • css, containing all mirrored CSS stylesheets.
  • html, containing all mirrored HTML pages.
  • js, containing all mirrored JavaScript.
  • ico, containing one mirrored favicon.

Since httrack internally rewrites all downloaded content to reflect this structure, your site should now be browsable as is without modification. If you prematurely halted the above command and would like to continue downloading, append the --continue option to the exact same command and retry.

That's it. No external contortions, error-prone URL rewriting, or rule-based proxy servers required.

Enjoy, fellow superusers.

Я рад слышать, что по крайней мере один человек полностью прочитал мой ответ. И спасибо за ваш дальнейший анализ и решение httrack. +1 mpy 9 лет назад 0
Решение httrack было идеальным, спасибо большое! ChrisChinchilla 9 лет назад 1
Рад быть малой помощью, ребята. Учитывая, как ужасно ужасен этот гобелен горя и обмана, я просто * должен был * поделиться своими выводами. Cecil Curry 9 лет назад 0
Чтобы удалить ограничение скорости передачи, добавьте следующие параметры: --disable-security-limit --max-rate = 0 Oswaldo 6 лет назад 0
4
Prinz

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. выберите уровень из глубины Сохранить и нажмите сохранить enter image description here
  4. выбрать Restrict to Drirectory/ Domainиз фильтра
    enter image description here

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

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

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

Это был бесценный ответ. Точное изучение внутренней структуры сайта The Wayback Machine было ключом к решению на основе [httrack] (http://superuser.com/a/770652/334611), на которое я в конце концов наткнулся. ** Ты рок, mpy. ** Cecil Curry 9 лет назад 1
0
Michael Yasumoto

Будьте осторожны с приведенной ниже командой, потому что она захватывает много. 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 10 лет назад 0
0
Brian

Формат 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 10 лет назад 0

Похожие вопросы