3

サイトとそのすべての内部リンク ファイルをミラーリングするwget -mkp http://example.comを知っています。

しかし、すべての画像が別のドメインに保存されているサイトをバックアップする必要があります。これらの画像も wget でダウンロードし、それに応じて src タグを更新するにはどうすればよいですか?

ありがとうございました!

4

3 に答える 3

1

@PatrickHornの回答のわずかに変更されたバージョン:

まずcd、ダウンロードしたファイルを含むトップディレクトリに移動します。

「その1つのドメインからだけではあるが、再帰的にページを見つける最初のwget」

wget --recursive --timestamping -l inf --no-remove-listing --page-requisites http://site.com

「ホストにまたがるが、ページを再帰的に取得しない2番目のwget」

find site.com -name '*.htm*' -exec wget --no-clobber --span-hosts --timestamping --page-requisites http://{} \;

私はこれを試しましたが、ほとんどうまくいったようです-私が探しているサイトだけからすべての.htm(l)ページを取得し、次に外部ファイルを取得します。外部ファイルのローカルコピーを基準にするようにリンクを変更することはまだできていません。

于 2011-11-09T10:33:31.203 に答える
0

-r と -H を指定した wget は、大規模なサイト (おそらく広告や検索ボックスを介して) に容易に到達し、インターネット全体に広がる可能性があるため、かなり危険です。1 つのページのすべての依存関係をダウンロードするための秘訣は、必ずしも再帰が必要なわけではありませんが、次のように、ページの前提条件をダウンロードし、wget が複数のホストにまたがるようにすることです。

wget -H -N -kp http://<site>/<document>

ただし、このコマンドを使用すると、再帰的な動作が得られなくなります。

したがって、2 つを組み合わせるために、最初の wget を使用して、その 1 つのドメインからのみではありますが、再帰的にページを見つけることができます。ホストにまたがるがページを再帰的に取得しない 2 番目の wget:

wget -mkp http://example.com
find example.com/ -name '*.html*' -exec wget -nc -HNkp http://{} \;

-nc は重要なポイントです。これは wget に、サーバーからダウンロードしたように動作するように指示しますが、代わりにディスク上のローカル コピーを使用します。つまり、参照は既に変換されているはずです。次に、すべてのリソースをフェッチします。最後に、元のファイル (クエリ文字列が必要) を上書きし、2 番目のファイルに正しい名前を付ける必要があります。これはファイルを二重にダウンロードして修正できることに注意してください-しかし、私が立ち往生している場所は-kで、ダウンロードしなかった相対URLを絶対URLに変換します。したがって、2 番目のステップの後、すべてのリンクが再びリモート URL になります。

幸いなことに、すべての絶対リンクは「 http://example.com/ 」で始まる必要があるため、この問題は手動で解決する方が少し簡単です。そのため、単純な「sed」スクリプトを実行してリンクを修正できる可能性があります。参照。

example.com に含めると予想されるドメインがわかっている場合は、 -D オプションを使用して、ダウンロード元と予想されるドメインのみを指定し、他には何も指定しないことをお勧めします。たとえば、google.com から gstatic.com も含めます。

ここに別の人が同様の質問をしていますが、リモート イメージのダウンロードは解決されていないようです。

ここのスレッドは、弾丸を噛んで「-r -l 1 -H」を実行することを提案していますが、-A を使用して、実際に画像または css タイプに保存されるファイルを制限することもできます。

于 2011-03-09T03:01:38.907 に答える