1

私はしばしば wget を使用して、非常に大きな Web サイトをミラーリングします。ホットリンクされたコンテンツ (画像、ビデオ、css、js など) を含むサイトは問題を引き起こします。クロールで他のホストへのハイパーリンクをたどらない限り、wget が他のホストにあるページの必要条件を取得することを指定できないようです。ホスト。

たとえば、このページを見てみましょう https://dl.dropbox.com/u/11471672/wget-all-the-things.html

これが、すべてのページ要件 (ホットリンクされたものを含む) を含めて、完全にミラーリングしたい大規模なサイトであるとしましょう。

wget -e robots=off -r -l inf -pk 

^^ ホットリンクされた画像以外のすべてを取得します

wget -e robots=off -r -l inf -pk -H

^^ホットリンクされた画像を含むすべてを取得しますが、制御不能になり、Web全体のダウンロードに進みます

wget -e robots=off -r -l inf -pk -H --ignore-tags=a

^^ ホットリンクされた画像とローカル画像の両方を含む最初のページを取得し、スコープ外のサイトへのハイパーリンクをたどりませんが、明らかにサイトの次のページへのハイパーリンクもたどりません。

これを達成するための他のさまざまなツールと方法があることは知っていますが (HTTrack と Heritrix を使用すると、ユーザーは他のホスト上のホットリンクされたコンテンツと他のホストへのハイパーリンクを区別できます)、wget でこれが可能かどうかを確認したいと思います。 . 出力しているWARCファイルに外部コンテンツ、リクエスト、およびヘッダーを含めたいので、理想的にはこれは後処理では行われません。

4

2 に答える 2

3

page-reqs のみのホストにまたがるように指定することはできません。-H はオール オア ナッシングです。-r と -H はインターネット全体をプルダウンするため、それらを使用するクロールを分割する必要があります。ホットリンクされたページ要求を取得するには、wget を 2 回実行する必要があります。1 回目はサイトの構造を再帰するため、もう 1 回はホットリンクされた要求を取得するためです。私はこの方法で運が良かった:

1)wget -r -l inf [other non-H non-p switches] http://www.example.com

2) サイト構造 ( ) 内のすべての HTML ファイルのリストを作成し、ファイルにfind . | grep htmlパイプします。

3)wget -pH [other non-r switches] -i [infile]

ステップ 1 では、サイトの構造がローカル マシン上に構築され、その中に HTML ページが表示されます。ステップ 2 でページのリストが表示され、ステップ 3 でそれらのページで使用されているすべてのアセットが取得されます。これにより、ホットリンクされたアセットがまだ有効である限り、ローカル マシン上に完全なミラーが構築されます。

于 2012-10-19T16:58:32.637 に答える