wget -kはすべてのリンクを変換しません

wget -kはすべてのリンクを変換しません

ウェブサイト全体を別のドメインにミラーリングしようとしています。

使ってみよう

wget -mk http://example.com

ただし、-kオプションは一部の元のURLを保持し、残りは変換します。たとえば、次のようになります。

<link rel="stylesheet" href="http://example.com/templates/css/style.css" type="text/css" />
<!--[if lt IE 8]>
  <link rel="stylesheet" href="/templates/css/ie.css" type="text/css" />
<![endif]-->
<!--[if lt IE 7]>
  <link rel="stylesheet" href="/templates/css/ie6.css" type="text/css" />
<![endif]-->

またはimgタグ:

<img src="http://example.com/templates/img/logo.jpg"

そしてaタグが正しく変換されました。

これはindex.htmlから取得され、wgetの出力はindex.htmlが変換されたことを示しています。

Converting example.com/index.html... 30-12

なぜこれが起こるのですか?

答え1

これはおそらくあなたが見ている内容を説明するwgetマンページから得られたものです。

-k --リンク変換

ダウンロードが完了したら、ドキュメントのリンクをローカルビューに合わせて変換します。これは、表示されるハイパーリンクだけでなく、埋め込み画像、スタイルシートリンク、HTML以外のコンテンツへのハイパーリンクなど、外部コンテンツにリンクされている文書のすべての部分にも影響します。

各リンクは、次の2つの方法のいずれかに変更されます。

  • ファイルリンクWgetからダウンロード相対リンクで指すファイルを参照するように変更します。

例:ダウンロードしたファイル/foo/doc.htmlが/bar/img.gif(やはりダウンロード済み)にリンクされている場合、doc.htmlのリンクは../bar/img.gifを指すように変更されます。この変換は、すべてのディレクトリの組み合わせに対して安定しています。

  • ファイルリンクまだWget経由でダウンロードされていません。ホスト名とそれらが指す場所への絶対パスを含めるように変更します。

例: ダウンロードしたファイル /foo/doc.html が /bar/img.gif (または ../bar/img.gif) にリンクされている場合、doc.html のリンクは以下を指すように変更されます。http://ホスト名/bar/img.gif

詳細がなければ、より正確には困難です。

答え2

サーバーにrobots.txtファイルがある可能性があります。-e robots=offこの場合、このオプションが役に立ちます。 (私も同様の状況にあった。)

答え3

ミラーサイトがHTTP認証で保護されている場合は、コマンドラインオプションを使用してユーザー名とパスワードを入力する必要があります。何かが動作している--http-user=someoneようです--http-password=secret。資格情報をURLの一部として指定すると、wgetがhttps://someone:secret@somewhere/認証なしで別のファイルをインポートしようとしたときに一部のファイルのみがダウンロードされる予期しない動作が発生する可能性があります。これにはパターンと妥当な理由があると確信していますが、アクセス可能なリンクとアクセスできないリンクの違いを調べるのに苦労していません。

関連情報