web-dev-qa-db-ja.com

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を投入しましたが、成功しませんでした。

このコマンドで残りのページをダウンロードできない理由はありますか?

6
Josh B.

セキュリティチェックを含むリンクを再帰的にダウンロードして、ループリダイレクトを発生させます。

あなたのウェブサイトが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回目には元のページにリダイレクトされることを想定しておらず、ブラックリストに登録されているため、リンクをたどりません。

セキュリティチェックのリダイレクトを行わないようにするためのCookieマジックを実行する方法は絶対にあり得ますが、その方法はわかりません。

ただし、手動で recompile wgetを実行する場合は、問題の修正は簡単です。src/recur.cにこれらの2行を追加するだけです。

            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>のようなものを使用して、意図したとおりにスレッド全体をフェッチできます。

これを試してください:

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

このコマンドは、すべてのサイトからすべての要素を含むスレッド全体を取得します。タイプで制限できます、--accept html,gif,png,jpg,jpeg 例えば。

1
ingopingo

ここで大声で考えているだけです。webhttrackのようなものはどうですか?または最初にjmeterを実行->リンクのリストをエクスポート->次にwgetまたはcurlを使用しますか?

[〜#〜] update [〜#〜] webhttrackでテストされただけで、そのジョブで機能し、CLIとGuiの両方で使用できます。

0
Joakim