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


11

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

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

期待する:

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

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

正接ソリューション

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

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


ファイル> Firefoxまたはその他のブラウザで
名前を付けて

実際にファイルが必要ですか、それとも正しくレンダリングされたバージョンのページが必要ですか?

私はファイルが欲しいのですが、とにかくページを正しく表示するために必要です。あなたがそれらを持っていなかった場合、それは異なって見えます。File> Save AsはFirefoxでは機能しません。これを行うと、CSSイメージを取得できません。tumblr.com/login試しください。背景画像がありません。入力フィールドのbg画像がありません。

どのwgetソリューションもうまくいきませんでした。私のタンジェントソリューションは、このようなサイトの節約を実現するための最良の方法です。ただし、おそらくApple.comのような非常に複雑なページでは、多くのリソースパスがjavascriptの実行によって動的に生成されるために失敗するのを見てきました。
Lana Miller

回答:


12

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を使用しているため、no-check-certificateが必要

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

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


1
私はこれを試しましたが、JSまたはCSSまたは画像ファイルを取得しませんでした。しましたか?

tumblr(上記の例)で使用している場合は、-no-check-certificateを指定する必要があります。

私はあなたが正しいと思う、それはおそらくそのオプションを必要とします。ただし、index.html以外はまだ何もありません。何かが足りない...

@LanaMiller私は私の答えを更新しました。問題がある場合はお知らせください。

-exclude-domains!= tumblr.comのようなことはできませんか?
alpha1 2011年

3

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

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

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


1

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

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

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


1
これはすべてを取得します。質問を読んでください。
evgeny 2011年

-1
wget -r http://www.example.com

私はそれがすべてをつかむと思いますが、それに打撃を与えて見つけてください。


1
それはあまりにも多くのすべてを取得します。これまでのところ、私が見つけたFireFoxソリューションが最良のソリューションです。必要なものだけを取得します。

-1

$(man wget):

-p

--page-requisites

このオプションにより、Wgetは指定されたHTMLページを適切に表示するために必要なすべてのファイルをダウンロードします。これには、インライン化された画像、サウンド、参照されるスタイルシートなどが含まれます。

通常、単一のHTMLページをダウンロードする場合、適切に表示するために必要となる可能性のある必要なドキュメントはダウンロードされません。-rを-lと一緒に使用すると効果がありますが、Wgetは通常、外部ドキュメントとインラインドキュメントを区別しないため、通常、要件が欠落している「リーフドキュメント」が残ります。

たとえば、ドキュメント1.htmlに、1.gifを参照する「<IMG>」タグと、外部ドキュメント2.htmlを指す「<A>」タグが含まれているとします。2.htmlは似ていますが、その画像は2.gifであり、3.htmlにリンクしているとします。これが任意の数まで続くとしましょう。

コマンドを実行すると:

wget -r -l 2 http:// <サイト> /1.html

1.html、1.gif、2.html、2.gif、3.htmlがダウンロードされます。ご覧のように、3.htmlには必須の3.gifがありません。Wgetは、再帰を停止する場所を決定するために、1.htmlからのホップ数(最大2)を単純にカウントしているためです。ただし、このコマンドでは:

wget -r -l 2 -p http:// <サイト> /1.html

上記のすべてのファイルと3.htmlに必要な3.gifがダウンロードされます。同様に、

wget -r -l 1 -p http:// <サイト> /1.html

1.html、1.gif、2.html、および2.gifがダウンロードされます。人はそれを考えるかもしれません:

wget -r -l 0 -p http:// <サイト> /1.html

1.htmlと1.gifだけをダウンロードしますが、残念ながらこれは当てはまりません。-l0は-l infと同等、つまり無限再帰です。単一のHTMLページ(またはコマンドラインまたは-i URL入力ファイルで指定されたいくつかのHTMLページ)とその(またはそれらの)必要条件をダウンロードするには、-rと-lをオフのままにします。

wget -p http:// <サイト> /1.html

Wgetは-rが指定された場合と同じように動作しますが、ダウンロードされるのはその単一のページとその必要条件だけであることに注意してください。そのページから外部ドキュメントへのリンクはたどられません。実際、1つのページとそのすべての必要条件をダウンロードし(それらが別のWebサイトに存在する場合でも)、ロットがローカルで正しく表示されることを確認するには、この作成者は-pに加えていくつかのオプションを使用することを好みます。

wget -E -H -k -K -p http:// <サイト> / <ドキュメント&gt ;

このトピックを終えるために、外部ドキュメントリンクのWgetの考えは、「<A>」タグ、「<AREA>」タグ、または「<」以外の「<LINK>」タグで指定されたURLであることを知っておく価値があります。 LINK REL = "stylesheet"> "。


2
これのどの部分がソリューションに似ていると思いますか?マニュアルページの内容を読んでみましたが、正しい解決策がここにありません。これを自分で試しましたか?コマンドは、質問に具体的に対処するものだと思いますか。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.