web-dev-qa-db-ja.com

どのようにWGETを使用してサイトを1レベルの深さでミラーリングし、CSSイメージを含むJS、CSSリソースを回復しますか?

永続的な保存のために、簡単なページのコピーをHDにダウンロードしたいと思います。私は深い再帰的なgetを探しているのではなく、単一のページだけを探していますが、そのページによって読み込まれるすべてのリソースもダウンロードする必要があります。

例: https://www.tumblr.com/

期待する:

  • Index.html
  • ロードされた画像
  • ロードされたJSファイル
  • ロードされたCSSファイル
  • CSSファイルに読み込まれた画像
  • ダウンロードされたコピーで動作するようにローカライズされたページリソースへのリンク(Web依存なし)

これを行うのに最適なwget構文または他のツールを見つけるのを手伝ってくれるかどうか知りたいです。私が試したツールは通常、CSSによる画像の読み込みに失敗するため、ローカルに読み込んだときにページが正しく表示されません。ありがとうございました!

正接ソリューション

FireFoxを使用してこれを行う方法を見つけました。デフォルトの保存は壊れており、「保存完了」と呼ばれるアドオンがあり、明らかにこれでうまくいくことができます。ただし、FireFoxの現在のバージョンではサポートされていないため、ダウンロードできません。その理由は、このアドオン「Mozilla Archive Format」に組み込まれたためです。それをインストールし、[ファイル]> [名前を付けてページを保存...]を使用すると、基本的に古いアドオンである「Webページ、完了」という新しいオプションがあり、FireFoxが使用するストック実装を修正します(これはひどいです)。これはWGETソリューションではありませんが、実行可能なソリューションを提供します。

編集:これをやろうとしている将来この質問をフォローしている可能性のある人のための別のばかげた問題。アドオンを適切に機能させるには、[ツール]> [Mozillaアーカイブ形式]を選択し、(ページの忠実なスナップショットを撮る)の(ひどい)デフォルト設定を[保存完了を使用してスクリプトとソースを保持する]に変更してください。変更しないと、アドオンがすべて空になりますスクリプトファイルを置き換え、「/ *スクリプトはスナップショットの保存によって削除されました* /」というテキストに置き換えます。

11
Lana Miller

wget -p -k http://ExampleSite.com

-pは、サイトを正しく表示するために必要なすべての要素(css、画像など)を取得します。 -kを指定すると、すべてのリンクが(CSSと画像のリンクを含むように)変更され、オンラインで表示されたページをオフラインで表示できるようになります。

更新:これはサンプルサイトに固有です:tumblr.com

wget -H -N -k -p --exclude-domains quantserve.com --no-check-certificate -U "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110613 Firefox/6.0a2" https://www.tumblr.com

内訳:

-H = wgetが外部ホストにまたがることを許可します。 tumblrは同じアドレスのフロントページに画像がないため、必須です。secure.assets.tumblr.comを使用しています。ドメインの除外に関する注意を参照してください

-N =同じページを長期間ダウンロードする場合に備えて、現在のファイルよりも新しいファイルのみを取得します

-k =オフラインで正しく表示するようにリンクを変換します

-p =正しく表示するために必要なすべての要素(css、画像など)を取得します

--exclude-domains = tumblr.comのホームページにはquantserve.comへのリンクがあり、これは必要ないので、wgetのダウンロードから除外する必要があります。 :これは-Hと一緒に使用する必要がある非常に重要なものです。サイトと外部ホストへの複数のリンク(広告主と分析など)がある場合は、それらも取得します。

--tumblrがhttpsを使用しているため、チェックなしの証明書が必要

-Uはユーザーエージェントを変更します。これはデフォルトのwgetユーザーエージェントを許可するため、このインスタンスでは実際には必要ありませんが、一部のサイトがそれをブロックすることを知っています。他のサイトで問題が発生した場合に備えて、ここにそれを投げ込みました。私が与えた例のスニペットでは、それはMozilla Firefox 6.02aとして表示されます

最後にあなたはサイトを持っています: https://www.tumblr.com

12
serk

あなたが言及した特定のサイトと、それのようにコード化された他の多くのサイトでは、wget(およびcurl)は機能しません。問題は、ブラウザでページをレンダリングするために必要なアセットリンクの一部が、JavaScriptを介して作成されていることです。 Wgetには、javascriptの実行が保留されている機能リクエストがあります。

http://wget.addictivecode.org/FeatureSpecifications/JavaScript

ただし、それが完了するまでは、JavaScriptを使用してアセットリンクを構築するサイトは、wgetを使用して複製できません。最も簡単な解決策は、実際にDOMを構築し、ブラウザーエンジン(つまり、あなたが言及したfirefoxメソッド)のようにJavaScriptを解析するツールを見つけることです。

3
polynomial

Wgetを使用してシェル経由でコマンドを発行することにより、これを自動的に(またはプログラムでコーディングする場合)行うこともできます。

wget --convert-links -r http://www.yourdomain.com

ページと内部ファイルをダウンロードし、リンクをローカルにします。

1