web-dev-qa-db-ja.com

Wgetを使用してWebサイトの完全なローカルコピーを作成します

OK、これが私が必要なものです:

  • 私はMacを使用しています(Mac OS X 10.6.8)
  • ハードドライブ上のWebサイトを完全にミラーリングしたい(これは テストとして使用しているもの
  • オフライン時にウェブサイトを閲覧できるように、すべての画像と前提条件が必要です
  • すべてのページの相対リンクをそれに応じて更新したい
  • (*オプション).htmlすべてのファイルの拡張子があれば、ブラウザで簡単に認識して開くことができます。

これは私が使用しているものです:

wget --recursive --no-clobber --page-requisites --convert-links --html-extension --domains wikispaces.com http://chessprogramming.wikispaces.com/

事は:

  • .cssファイルや画像などはダウンロードされていないようです-少なくとも、実行したままのレベルまでは(OK、多分wouldプロセスが完了した場合はダウンロードされるため、これをスキップする場合があります)
  • HTML拡張子は追加されていません
  • リンクは変換されません

だから...何かアイデアはありますか?

6
Dr.Kameleon

まず、これはOSXのみの問題のようです。上記のコマンドはUbuntu14.04 LTSで使用でき、そのまま使用できます。いくつかの提案:

.cssファイルや画像などはダウンロードされていないようです-少なくとも、実行したままのレベルまではダウンロードされます(プロセスが完了した場合はダウンロードされる可能性があるため、これをスキップする場合があります)

  1. --domains wikispaces.comと言うと、他のドメインにあるリンクされたCSSファイルをダウンロードしません。そのウェブサイトのスタイルシートのいくつかは、index.htmlのソースを示唆しているようにhttp://c1.wikicdn.comにあります。

  2. 一部のWebサイトでは、リンクを使用してリンクされたファイル(参照画像)に直接アクセスすることを許可していません( このページ を参照)。あなたはウェブサイトを通してのみそれらを見ることができます。しかし、ここではそうではないようです。

  3. Wgetは、HTMLの解析中にコメントを認識しないようです。 Wgetの実行中に次のように表示されます。

--2016-07-01 04:01:12--  http://chessprogramming.wikispaces.com/%3C%25-%20ws.context.user.imageUrlPrefix%20%25%3Elg.jpg
Reusing existing connection to chessprogramming.wikispaces.com:80.
HTTP request sent, awaiting response... 404 Not Found
2016-07-01 04:01:14 ERROR 404: Not Found.

ブラウザでリンクを開くと、ログインページに移動します。ファイルの名前は、コメントのどこかで発生したことを示しています。

  1. 多くのサイトでは、ダウンロードマネージャーを使用したダウンロードが許可されていないため、HTTP要求を発信したクライアント(ブラウザー、またはサーバーからファイルを要求するために使用したクライアントを含む)を確認します。

-U somebrowserを使用してクライアントを偽造し、ブラウザのふりをします。たとえば、-U mozillaを追加して、Mozilla/Firefoxがページを要求していることをサーバーに通知できます。しかし、私はこの議論なしでサイトをダウンロードできるので、これはここでは問題ではありません。

  1. ダウンロードとリクエストの速度は重要です。サーバーは、サイトからデータを要求するロボットによってパフォーマンスが肥大化することを望んでいません。 Wgetで--limit-rate=および--wait=引数を使用してダウンロード速度を制限し、個々のファイルの取得要求を生成するまで数秒待ちます。

例えば.

wget -r --wait=5 --limit-rate=100K <other arguments>

getリクエストの間に5秒間待機し、ダウンロードレートを100Kbpsに制限します。繰り返しになりますが、サーバーはWebサイトをフェッチするためにダウンロード速度を制限する必要がなかったため、これはここでは問題ではありません。

ここで最も可能性のあるケースは(1)です。 --domains wikispaces.com--domains *に置き換えて、再試行してください。どこに行くのか見てみましょう。少なくともCSSファイルをフェッチできるはずです。

HTML拡張子は追加されていません

コマンドを実行すると、HTML拡張機能が追加されます。

リンクは変換されません

私がここで完全に正しいかどうかはわかりませんが、サイトをミラーリングするときにリンクがすぐに機能することを期待しないでください。

HTTP getリクエストに引数を渡すと(たとえば、http://chessprogramming.wikispaces.com/wiki/xmla?v=rss_2_0には引数v=rss_2_0があります)、リクエストはサーバー上で実行されているスクリプト(PHPなど)で処理されます。引数は、引数に応じて正しいバージョンのスクリプトをフェッチするのに役立ちます。サイト、特にPHPで実行されるWikiをミラーリングしている場合、元の=をフェッチしない限り、サイトを正確にミラーリングすることはできません。 PHPスクリプト。PHPスクリプトによって返されるHTMLページは、そのスクリプトで表示されると予想されるページの1つの面にすぎません。正しいアルゴリズムgeneratesページはサーバーに保存され、元のPHPファイルをフェッチした場合にのみ正しくミラーリングされます。これは実行できません。 HTTPを使用します。そのためには、サーバーへのFTPアクセスが必要です。

お役に立てれば。

3
U. Muneeb

ロシアのソユーズロケットの答えからのオプション1は確かに私の場合の問題でした。実際、https://censoreddomain.comではなくhttps://www.censoreddomain.comをリクエストしたため、問題が発生しました(www.に注意してください)。 www.を追加すると、wgetはサイト全体を喜んで削ってくれました。したがって、スクレイプしようとしているドメインの正規名と完全に一致するであることが重要です。

間違いは私のものだったので、この「キャッチ」はOSXだけでなくすべてのプラットフォームのwgetに当てはまると思います。

1
Julian