web-dev-qa-db-ja.com

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

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の方がうまくいくでしょうが、今のところそれはあまりにも多くをつかんでいます。

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

12
user695322

以前の回答は役に立ちましたが、根本的な質問を簡潔に、確実に、そして繰り返し解決することはできません。この投稿では、それぞれの問題点について簡単に説明してから、控えめなhttrackベースのソリューションを提供します。

バックグラウンド

ただし、その前に、mpyの適切に記述された応答を熟読することを検討してください。悲しいことに無視された投稿で、mpyは、Wayback Machineのあいまいな(そして正直なところわかりにくい)アーカイブスキームを厳密に文書化しています。

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

このスキームによって提示される恐ろしい落とし穴を理解することは、以前の解決策の不十分さを理解するための核心です。続けましょう。

以前の解決策1:wget

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

複雑な外部URLの書き換え(例:Privoxy)がない場合、wgetを使用してWaybackアーカイブサイトを確実にミラーリングすることはできません。「問題2+解決策」のmpyの詳細として、どのミラーリングツールを選択しても、非一時的にダウンロードできるようにする必要がありますのみターゲットサイトに属するURL。デフォルトでは、ほとんどのミラーリングツールは推移的にダウンロードしますallターゲットサイトとそのサイトからリンクされているサイトの両方に属するURL–最悪の場合、「インターネット全体」を意味します。

具体的な例が整いました。サンプルドメインkearescue.comをミラーリングする場合、ミラーリングツール必須

  • https://web.archive.org/web/*/http://kearescue.comに一致するすべてのURLを含めます。これらは、ターゲットサイトによって提供されるアセットです(例: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ビデオなど)が埋め込まれているサイトの場合はそうです。

それは悪いことです。wgetdoesは、コマンドライン--exclude-directoriesオプションを提供します。除外するURLに一致する1つ以上のパターン。これらはnot汎用正規表現です。それらは、*構文が0個以上の文字に一致する単純なグロブです(/を除く)。除外するURLには任意の数の/文字が含まれているため、wgetcannotを使用してこれらのURLを除外し、cannotをミラーリングに使用しますウェイバック-アーカイブされたサイト。 期間。不幸な話の終わり。

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

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

Prinzは、FirefoxプラグインであるScrapBookを推奨しています。 Firefoxプラグイン。

おそらくそれがあなたが知る必要があるすべてでした。 ScrapBookFilter by String...機能does前述の「Problem2 + Solution」に対処しますが、not後続の「Problem3 + Solution」に対処します–つまり、無関係な重複の問題。

ScrapBookが前者の問題に適切に対処できるかどうかは疑問です。 mpyが認めているように:

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

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

以前の解決策3:wget + Privoxy

mpyは、wgetPrivoxyの両方を活用する堅牢なソリューションを提供します。 wgetis設定はかなり簡単ですが、Privoxyは合理的ではありません。または単純です。

Privoxyを適切にインストール、構成、使用するという技術的なハードルが非常に高いため、mpyのソリューションはまだ確認されていません。 shouldスケーラブルで堅牢な方法で機能します。参入障壁を考えると、このソリューションは、小規模から中規模のサイトを回復しようとする平均的なWebマスターよりも、大規模な自動化におそらく適しています。

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からミラーリングされたファイルタイプごとに1つのサブディレクトリが含まれている必要があります。これには通常、少なくとも次のものが含まれます。

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

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

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

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

20
Cecil Curry

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

しかし、最初に、 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の no-parent オプション_-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_サイト全体を取得します。私は絶対にそれを望んでいません!したがって、このフィルターは、Waybackマシンで_-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
_

構文を掘り下げるための演習として残しておきます。このフィルターの機能は次のとおりです。 not に_http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/_が含まれていない限り、_http://some.local.server/404_などのすべてのウェイバックURLが_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は all スナップショットをフェッチするまで何とか終了することはありません。私も本当に欲しくない!ここでは、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_)を置き換えました。しかし、これは実際には必要ありません。

7
mpy

wget

-ページ-必要条件
このオプションにより、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>

そう 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のメモに似たテキスト/ HTML編集機能

サイトをミラーリングする方法
インストール scrapbook そしてFirefoxを再起動します

  1. ブラウザにページをロード[ミラーリングするWebページ]
  2. ページを右クリック->ページに名前を付けて保存...
  3. 詳細保存からレベルを選択し、保存を押します enter image description here
  4. 選択する Restrict to Drirectory/Domain fromFilter
    enter image description here

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

5
Prinz

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

wayback_machine_downloader domain.org 

それを取得するには、Rubyをインストールする必要があります。そして:

gem install wayback_machine_downloader
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/からすべてのリンクされたアセットも取得する必要があります。

0
Brian

以下のコマンドは多くのことをつかむので注意してください。 '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不要なものをブラックリストに登録します。

0