Wgetは再帰的にダウンロードされません。

Wgetは再帰的にダウンロードされません。

次のディレクトリ構造を使用してフォーラム投稿をコピーしようとしています。

最初のページのURLは次のとおりです。

https://some.site.com/foo/bar/threadNumber

残りのページは次の形式に従います。

https://some.site.com/foo/bar/threadNumber/page/2
https://some.site.com/foo/bar/threadNumber/page/3
https://some.site.com/foo/bar/threadNumber/page/*

私は次のコマンドを使用しています:

wget --recursive --page-requisites --adjust-extension --no-parent --convert-links https://some.site.com/foo/bar/threadNumber

このコマンドは単一のURLをコピーするのに有効です。しかし、私はより高いディレクトリに置き、すべての/page/*ファイルを取得したいと思います。より高いディレクトリは必要ではなく、/page/より低いファイルのみが必要です。私も参加しましたが、--mirror成功していませんでした。

このコマンドがページの残りの部分のダウンロード速度を遅くしない理由をご存知ですか?

ベストアンサー1

セキュリティチェックでリンクを繰り返しダウンロードすると、循環リダイレクトが発生する可能性があります。

あなたのウェブサイトはwgetを混乱させる二重リダイレクトを使用するので、このコマンドは機能しません。--debugこのオプションで何を呼び出すことができるかについての詳細なログを見てみましょう(無関係な行は削除されます)。

---request begin---
GET /<URL> HTTP/1.1
---response begin---
HTTP/1.1 302 Found
Location: https://community.lego.com/auth/securityCheck?action=bounce&referrer=https%3A%2F%2Fcommunity.lego.com%2F<URL>
(...)
---request begin---
GET /auth/securityCheck?referrer=https%3A%2F%2Fcommunity.lego.com%2F<URL> HTTP/1.1
---response begin---
HTTP/1.1 302 Found
Location: https://community.lego.com/<URL>
(...)
Deciding whether to enqueue "https://community.lego.com/<URL>".
Already on the black list.
Decided NOT to load it.
Redirection "https://community.lego.com/<URL>" failed the test.

示されているように、要求をいくつかの「セキュリティチェック」に置き換えて返します。 Wgetは元のページと同じページに2番目のリダイレクトを望んでおらず、これをブラックリストと見なしてリンクをたどることはできません。

セキュリティチェックのリダイレクトが発生しないようにクッキーの魔法を実行する方法は明らかですが、その方法がわかりません。

しかし、必要に応じて再コンパイル手動wgetを使用すると、問題の解決策は簡単になります。src/recur.c

            status = retrieve_url (url_parsed, url, &file, &redirected, referer,
                                   &dt, false, i, true);
+
+         if (redirected)
+                 hash_table_remove (blacklist, url);

            if (html_allowed && file && status == RETROK
                && (dt & RETROKF) && (dt & TEXTHTML))

これにより、リダイレクトされるたびにブラックリストから現在のページが削除され、問題が解決されます。

場合によっては、無限ループが発生する可能性があるため、コミット可能なパッチではありません。

wgetを再構築したら、このようなものを使用して wget -np -nd -r -k -p <url> 期待どおりにスレッド全体を取得できます。

おすすめ記事