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

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

はい、必要なものは次のとおりです:

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

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

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

問題は次の通りです。

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

それで...何かアイデアはありますか?

答え1

まず、これは OS X のみの問題のようです。上記のコマンドは Ubuntu 14.04 LTS でも使用でき、すぐに動作します。いくつか提案があります:

.cssファイルや画像などは、少なくとも私が実行したままにしていたレベルまではダウンロードされていないようです(プロセスが完了したらダウンロードされるかもしれないので、この部分はスキップします)

  1. と言う場合--domains wikispaces.com、他のドメインにあるリンクされた CSS ファイルをダウンロードするわけではありません。その Web サイトのスタイルシートの一部は、http://c1.wikicdn.comのソースが示すように にありますindex.html

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

  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.
    

    ブラウザでリンクを開くと、ログイン ページが表示されます。ファイル名から、コメントのどこかに記述されていることがわかります。

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

    クライアントを偽装し、ブラウザのふりをするために使用します-U somebrowser。たとえば、-U mozillaMozilla/Firefox がページを要求していることをサーバーに伝えるために を追加できます。ただし、この引数がなくてもサイトをダウンロードできるため、ここでは問題ではありません。

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

    例えば

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

    取得リクエスト間で 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ページではありません。PHPスクリプトによって返されるHTMLページは、そのスクリプトで表示されるページの1つの側面にすぎません。生成するページはサーバー上に保存され、元の PHP ファイルを取得した場合のみ正しくミラーリングされますが、これは HTTP では実行できません。そのためには、サーバーへの FTP アクセスが必要です。

お役に立てれば。

答え2

オプション1からuser612013の回答私の場合は確かに問題でした。実際、私がhttps://censoreddomain.com代わりにリクエストしたためにうまくいかなかったのですhttps://www.censoreddomain.comwww.)。 を追加するとwww.wget喜んでサイト全体をスクレイピングしてくれました。スクレイピングしようとしているドメインの正規名と完全に一致している

間違いは私のものなので、この「落とし穴」はwgetOS X だけでなくすべてのプラットフォームに当てはまると思います。

関連情報