wgetまたはhttrackを使用してアーカイブされたWebサイトをミラーリングする際の問題


12

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のほうがうまくいくかもしれませんが、今はそれをつかみすぎています。

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


おとこ!私はまったく同じページをミラーリングしようとしました(元のサイトがまだオンラインであったときにそうしなかったことに本当に腹を立てました。これははるかに簡単だったでしょう)。問題は、20110722080716スナップショットですべてのファイルにアクセスできる-npわけではないため、wgetのオプションが役に立たないことだと思います。
mpy 14

欠落しているページが実際にアーカイブされていることを手動で確認しましたか?Archive.orgは常にすべてのページをアーカイブするとは限りません。
nitro2k01 14

回答:


20

有用ではあるが、以前の回答は、根底にある質問を簡潔に、確実に、繰り返し解決することができません。この投稿では、それぞれの問題を簡単に詳しく説明し、控えめなhttrackソリューションを提供します。

バックグラウンド

ただし、その前に、mpyの適切に記述された応答を熟読することを検討してください。残念ながら軽視されている投稿で、mpyはWayback Machineの不明瞭な(そして正直に難読化された)アーカイブスキームを厳密に文書化します。

当然のことながら、それはきれいではありません。Wayback Machineは、サイトを単一のディレクトリに完全にアーカイブするのではなく、数値的に識別された2つ以上の兄弟ディレクトリに単一のサイトを一時的に分散します。これがミラーリングを複雑にするということは、かなり控えめな表現です。

このスキームが提示する恐ろしい落とし穴を理解することは、従来のソリューションの不十分さを理解するための中核です。それでやってみましょう、私たちは?

事前解決策1:wget

関連するStackOverflowの質問「waybackmachineから古いWebサイトを復元する」は、おそらくこの点で最悪の犯罪者でありwget、Waybackミラーリングを推奨しています。当然、その勧告は根本的に不健全です。

複雑な外部URL書き換え(例:)がない場合PrivoxywgetWaybackアーカイブされたサイトを確実にミラーリングするために使用することはできません。「問題2 +ソリューション」の下のmpyの詳細として、選択するミラーリングツールは、非推移的にダウンロードできる必要があります。、ターゲットサイトに属する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を除外するために使用され、したがってができない鏡ウェイバック-アーカイブサイトに使用されます。限目。不幸な話の終わり。

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

事前ソリューション2:スクラップブック

PrinzScrapBookはFirefoxプラグインを推奨しています。Firefoxプラグイン。

おそらくあなたが知る必要があるのはそれだけでした。一方でScrapBookFilter by String...機能はありませんアドレス前述の『問題2 +ソリューションは、』それはありませんではありません、その後の『問題3 +ソリューション』に対処-すなわち、余分な重複の問題を。

ScrapBook前者の問題に適切に対処できるかどうかは疑問です。mpyとして是認:

Scrapbookはこれまでのところ、サイトを完全に取得できませんでしたが...

信頼性が低く、過度に単純化されたソリューションは非ソリューションです。次!

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

mpyは、wgetとの両方を活用した堅牢なソリューションを提供しますPrivoxy。しばらくwget あるのconfigureに合理的に簡単で、Privoxy何もなく、合理的です。またはシンプル。

適切にインストール、設定、および使用のimponderable技術的なハードルにPrivoxy、我々は、確認には至っていないMPYのソリューション。それはする必要があり、スケーラブルで堅牢な方法で動作します。参入の障壁を考えると、このソリューションはおそらく、小規模から中規模のサイトを回復しようとする平均的なウェブマスターよりも大規模な自動化に適しています。

あるwget+ Privoxyの価値は、ルック?絶対に。しかし、ほとんどのスーパーユーザーは、よりシンプルで、より簡単に適用できるソリューションによって、より良いサービスを受けることができます。

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

Enter httrackwgetミラーリング機能のスーパーセットを実装するコマンドラインユーティリティ。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からミラーリングされた各ファイルタイプごとに1つのサブディレクトリが含まれます。通常、これには少なくとも以下が含まれます。

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

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

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

お楽しみください、仲間のスーパーユーザー。


少なくとも1人が私の答えを徹底的に読んでくれたことを嬉しく思います。そして、さらなる分析とhttrackソリューションに感謝します。+1
mpy 14年

1
httrackソリューションは完璧でした、どうもありがとう!
クリスチンチラ

ちょっとした助力になって嬉しいです、みんな。この悲惨と欺ceのタペストリーがどれほどひどくひどいものであるかを解明するために、私は自分の発見を共有しなければなりませんでした。
セシルカレー

レート転送制限を削除するには、次のパラメーターを追加します。--disable-security-limits --max-rate = 0
Oswaldo

7

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

しかし、最初に、Wayback Machineからのミラーリングでこれほど難しいのは何ですか?

問題1 +ソリューション

Waybackツールバーはインタラクティブな使用には便利ですが、wgetに干渉する可能性があります。privoxy filterルールでそれを取り除きます

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ます。これは、wgetに404エラーを送信するためです。おそらく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ます(ご希望のサイトの最新のスナップショットに合わせて調整してください)。これは、ウェイバックマシンから発信されていないサイト構造にそのような番号がある場合に問題になる可能性があります。完璧ではありませんが、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_

ウェイバックマシンが画像(im_)、スタイルシート(cs_)などを分離するので、すべてを統合し、../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/latticeそれに応じてい相対リンク()を置き換えるためにsedマジックを使用しました。しかし、これは本当に必要ではありません。


1
これは非常に貴重な答えでした。The Wayback Machineの内部サイト構造の正確な分析は、私が最終的に偶然見つけたhttrackベースのソリューションの鍵でしたあなたはロック、mpy。
セシルカレー

5

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ページの編集
*テキスト/ HTML Operaのメモに似た編集機能

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

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

ミラーリングが完了するのを待ちます。ミラーリング後、ScrapBookメニューからWebサイトにオフラインでアクセスできます。


Scrapbookはこれまでのところサイトを完全に把握することに失敗しましたが、他の提案よりも可能な解決策に近かったです。特に、文字列によるフィルター...オプションは、ホスト/ドメインでフィルターするよりも役立ちました。したがって、私はあなたに賞金を授与:)
mpy 14

0

以下のコマンドは多くの情報を取得するため、注意してください。「l」の後の1は、サイト上の1レベルの深さのリンクのすべてのページを取得するように指示します。より深くスパイダーしたい場合は、これを2に変更しますが、ループに巻き込まれる可能性があるため、終了しない可能性があります。

wget -rHpkl 1 -e robots=off http://www.example.com/

サイトのどの部分を保持し、どの部分を気にしないのかはわかりませんが、サイトのさまざまな部分をホワイトリストおよび/またはブラックリストに登録して、必要なものだけを取得し、 archive.orgまたはインターネットのすべてをダウンロードします。

使用-D www.examle.com,www.another.example.comホワイトリストのみしたいドメインまたは使用--exclude-domains www.examle.com,www.another.example.com したくないものをブラックリストに。


感謝しますが、ホワイト/ブラックリストの問題は、すべてのアーカイブされたウェブサイトがweb.archive.orgホストから来ていることです。wget -np元のサイトがまだオンラインであった場合にミラーリングするはずだったものをすべてミラーリングしたいと思います。-l3または4に増やす必要があるため、あまり役に立たないので、結果としてウェブサイトの階層が上がりすぎます。
mpy

0

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

たとえば、このURL http://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/ます。


まさに、それが問題です。ページAがBにリンクしているとしましょう。したがって、現在のバージョンAは古いバージョンBにリンクします。しかし、BにはAへのリンクも含まれます。したがって、古いバージョンのAも取得され、古いバージョンに再びリンクします。これにより、(必要な)クロールの深さ4で、結果としてインデックスページの数十のバージョンが作成されますが、必要なファイルがすべてではありません。
mpy 14

0

それをより良くするツールがすでにあります:

wayback_machine_downloader domain.org 

取得するには、rubyをインストールする必要があります。その後:

gem install wayback_machine_downloader
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.