wget における「ブラック リスト」とは具体的に何を意味しますか?

wget における「ブラック リスト」とは具体的に何を意味しますか?

次のコマンドを実行しています

wget -d -e robots=off --recursive -l 10 -w 6.8 -t 3 -nc --random-wait -T 10 -R "*.js, *.css, *.jsp, *.mp3, *.mp4, *.swf, *.apk, *.pdf, *.css, *.doc, *.docx, *.xls, *.xlsx, *.jpg, *.jpeg, *.gif, *.JPG, *.JPEG, *.png, *.PNG" --server-response http://www.wuli.ac.cn/CN/volumn/home.shtml --user-agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0" -a wget_log &

以下のようなオプションが表示されます。

Setting --recursive (recursive) to 1
Setting --level (reclevel) to 10
Setting --wait (wait) to 6.8
Setting --tries (tries) to 3
Setting --no (noclobber) to 1
Setting --random-wait (randomwait) to 1
Setting --timeout (timeout) to 10
Setting --reject (reject) to *.js, *.css, *.jsp, *.mp3, *.mp4, *.swf, *.apk, *.pdf, *.css, *.doc, *.docx, *.xls, *.xlsx, *.jpg, *.jpeg, *.gif, *.JPG, *.JPEG, *.png, *.PNG
Setting --server-response (serverresponse) to 1
Setting --user-agent (useragent) to Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0
Setting --append-output (logfile) to wget_log

しかし、次のようなデバッグ出力が大量に表示されます。

Deciding whether to enqueue "http://www.wuli.ac.cn/CN/column/column3290.shtml".
Already on the black list.
Decided NOT to load it.
Deciding whether to enqueue "http://www.wuli.ac.cn/CN/column/column3290.shtml".
Already on the black list.
Decided NOT to load it.
Deciding whether to enqueue "http://www.wuli.ac.cn/CN/column/column3291.shtml".
Already on the black list.
Decided NOT to load it.
Deciding whether to enqueue "http://www.wuli.ac.cn/CN/column/column3293.shtml".
Already on the black list.
Decided NOT to load it.
Deciding whether to enqueue "http://www.wuli.ac.cn/CN/column/column3294.shtml".
Already on the black list.
Decided NOT to load it.
Deciding whether to enqueue "http://www.wuli.ac.cn/CN/column/column3290.shtml".
Already on the black list.
Decided NOT to load it.

これらをどこで「ブラックリスト」に入れるのか、よく分かりません。

答え1

ウェブページをブラックリストに登録しているのではなく、ブラックリストに登録しているのですwget

基本的に、ダウンロードされるすべての Web ページはwget「ブラック リスト」に登録され、同じページが 2 回ダウンロードされるのを防ぐようになっています。

この問題は、リクエストを何らかの「セキュリティ チェック」にバウンスして戻す二重リダイレクトを使用する Web ページで発生します。Wget は同じページに 2 度目にリダイレクトされることを想定しておらず、ブラック リストでそのページを検出して、そのページのダウンロードをスキップします。

この問題は2012年にGNU WGETで初めて言及されました。 バグ #37986: 同じ URL へのリダイレクトにより再帰が防止される そして修正が実装されましたが、どうやら Linux ディストリビューションには届かなかったか、何年も経って失われてしまったようです。

別のダウンローダーやwgetバージョンを探す以外に唯一の解決策は、この答え

ただし、wget を手動で再コンパイルする場合は、問題の修正は簡単です。 に次の 2 行を追加するだけです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))

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

場合によっては無限ループを引き起こす可能性があるため、すぐに提出できるパッチではないことに注意してください。

関連情報