背景

背景

wget を使用して Web サイトのローカル ミラーを作成しようとしています。しかし、リンク ページがすべて取得されないことがわかりました。

ウェブサイトはこちら

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 の方が適しているでしょうが、現時点では取得できる範囲が広すぎます。

では、どのような方法でアーカイブされたウェブサイトのローカルコピーを取得することができるのでしょうか?インターネットアーカイブ ウェイバックマシン?

答え1

これまでの回答は役に立ってはいるものの、根本的な疑問を簡潔かつ確実に、繰り返し解決できていません。この記事では、それぞれの難しさについて簡単に説明し、控えめな ベースhttrackの解決策を提示します。

背景

しかし、その前に、mpyのよく書かれた返答。残念ながら無視された彼の投稿では、mpyWayback Machine のわかりにくい (そして正直に言って難解な) アーカイブ スキームを厳密に文書化します。

当然のことながら、それは美しくありません。Wayback Machine は、サイトを 1 つのディレクトリに適切にアーカイブするのではなく、1 つのサイトを 2 つ以上の番号で識別される兄弟ディレクトリに一時的に分散します。これによりミラーリングが複雑になると言うのは、控えめな表現です。

この計画がもたらす恐ろしい落とし穴を理解することは、従来の解決策の不十分さを理解するための核心です。さあ、始めましょう。

以前の解決策 1: wget

関連するStackOverflowの質問「Waybackmachine から古いウェブサイトを復元する」おそらくこの点で最悪の違反者は、wgetWayback ミラーリングを推奨している点です。当然ながら、この推奨は根本的に根拠がありません。

複雑な外部URL書き換え(例:)がない場合PrivoxywgetWayback にアーカイブされたサイトを確実にミラーリングするために使用することはできません。としてmpy「問題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に一致する1つ以上のパターンを受け入れるコマンドラインオプションを提供します。これらはない汎用正規表現。*構文が0文字以上の文字に一致する単純なグロブです。除く/除外するURLには任意の数の/文字が含まれているため、wget できないこれらのURLを除外するために使用し、したがってできないWayback にアーカイブされたサイトをミラーリングするために使用されます。期間。残念な話はこれで終わり。

この問題は公的記録少なくとも 2009 年以来、この問題は未だ解決されていません。次!

以前の解決策 2: スクラップブック

プリンツScrapBookFirefox プラグインを推奨します。Firefox プラグイン。

おそらく、これだけ知っておく必要があったでしょう。ScrapBookFilter by String...機能はする前述の「問題2+解決策」に対処するには、ない後続の「問題 3 + 解決策」、つまり、余分な重複の問題に対処します。

ScrapBook前者の問題を十分解決できるかどうかは疑問である。mpy認める:

Scrapbook は今のところサイトを完全に掌握することに失敗していますが...

信頼性が低く、過度に単純化された解決策は非解決策です。次へ!

以前のソリューション 3: wget + Privoxy

mpywgetと の両方を活用した堅牢なソリューションを提供しますPrivoxywget 設定が比較的簡単であるということは、Privoxy決して合理的とは言えません。あるいは、単純ではありません。

適切にインストール、設定、使用するという計り知れない技術的ハードルのためPrivoxy、まだ確認できていません。mpyの解決策です。すべきスケーラブルかつ堅牢な方法で動作します。参入障壁を考慮すると、このソリューションは、小規模から中規模のサイトを復旧しようとする平均的なウェブマスターよりも、大規模な自動化に適していると考えられます。

wget+ はPrivoxy一見の価値がありますか?絶対に。しかし、ほとんどのスーパーユーザーにとっては、よりシンプルで、より容易に適用できるソリューションのほうが適しているかもしれません。

新しいソリューション: httrack

のミラーリング機能httrackのスーパーセットを実装するコマンドラインユーティリティを入力します。パターンベースのURL除外とwgethttrackそして単純なサイト再構築。前者は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 からミラーリングされたファイルタイプごとに 1 つのサブディレクトリが含まれます。これには通常、少なくとも次のものが含まれます。

  • cssミラーリングされたすべての CSS スタイルシートが含まれます。
  • htmlミラーリングされたすべての HTML ページが含まれます。
  • jsミラーリングされたすべての JavaScript が含まれます。
  • ico、ミラー化されたファビコンが 1 つ含まれます。

はダウンロードされたすべてのコンテンツを内部的に書き換えてこの構造を反映させるためhttrack、サイトは変更せずにそのまま閲覧できるはずです。上記のコマンドを途中で停止し、ダウンロードを続行したい場合は、--continueまったく同じコマンドにオプションを追加して再試行してください。

それでおしまい。外部的な調整や、エラーが発生しやすい URL の書き換え、ルールベースのプロキシ サーバーは必要ありません。

スーパーユーザーの皆さん、楽しんでください。

答え2

残念ながら、どの回答も、アーカイブされた Web サイトから完全なミラーを作成するという問題 (すべてのファイルを何十回も複製せずに) を解決できませんでした。そこで、別のアプローチを考案しました。ハッキングされたは重要な言葉です。私の解決策は一般的な解決策でも、非常に単純なもの(つまりコピー&ペースト)でもありません。私はPrivoxy プロキシ サーバーファイルを書き換える急いでwget でミラーリング中。

しかし、まず、ミラーリングの何がそんなに難しいのか?ウェイバックマシン?

問題 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、最終的にサイト全体を取得します。これは絶対に避けたいことです。そこで、このフィルターはWayback Machine での動作をnavi.milエミュレートしようとします。-np

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

構文を詳しく調べるのは練習問題として残しておきます。このフィルターは次のようなことをします。Wayback 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。これは、wget に 404 エラーを送信することです。おそらく、privoxy の方がエレガントに実行できます。ただし、私にとって最も簡単な方法は、ローカル http サーバー上の存在しないページへのリンクを書き換えることだったので、これに固執しました。

そして、調整も必要です両方の発生http://cst-www.nrl.navy.mil/lattice/ミラーリングしたいサイトを反映するには、を使用します。

問題3 + 解決策

そして最後に、アーカイブされたページのいくつかのバージョンが別のスナップショットのページにリンクしているかもしれません。そして、それはまた別のスナップショットにリンクしています。そして、同じページのスナップショットが大量に作成されてしまいます。そして、wgetは、取得するまで決して完了しません。全てスナップショット。私もそれは欲しくない!ここで大いに役立つのが、ウェイバックマシンが非常に賢いということだ。ファイルをリクエストできる

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マシンから来ていない場合、これは問題になる可能性があります。完璧ではありませんが、構造タイプサイト。

良い点は、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 Machine は画像 ( 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 が指定された場合と同じように動作しますが、ダウンロードされるのは単一のページとその必要条件のみであることに注意してください。そのページから外部ドキュメントへのリンクはたどられません。実際には、単一のページとその必要条件すべて (別の Web サイトに存在する場合でも) をダウンロードし、すべてがローカルで適切に表示されるようにするために、この著者は -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 の拡張機能で、Web ページを保存し、コレクションを簡単に管理するのに役立ちます。主な特徴は、軽快さ、スピード、正確さ、多言語サポートです。主な特徴は次のとおりです:
* Web ページの保存
* Web ページのスニペットの保存
* Web サイトの保存
* ブックマークと同じ方法でコレクションを整理
* コレクションの全文検索とクイック フィルタリング検索
* 収集した Web ページの編集
* Opera の Notes に似たテキスト/HTML 編集機能

サイトをミラーリングする方法
インストールスクラップブック Firefoxを再起動します

  1. ブラウザでページを読み込む [ミラーリングするウェブページ]
  2. ページを右クリック -> 「名前を付けてページを保存」
  3. レベルを選択詳細 保存 保存を押します ここに画像の説明を入力してください
  4. 選択するRestrict to Drirectory/Domainからフィルター
    ここに画像の説明を入力してください

ミラーリングが完了するまでお待ちください。ミラーリング後は、ScrapBookメニューからオフラインで Web サイトにアクセスできるようになります。

答え4

インターネット アーカイブの URL の形式には、サイトがアーカイブされた日時が含まれます。スペースを節約するため、変更されていないアセットはサイトの以前のバージョンにリンクされます。

例えばこのURLhttp://web.archive.org/web/20000229123340/http://www.yahoo.com/サイトがクロールされた日付は 2000 年 2 月 29 日 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/

関連情報