次のコマンドを実行しています
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))
これにより、リダイレクトされるたびに現在のページがブラックリストから削除され、問題が解決されます。
場合によっては無限ループを引き起こす可能性があるため、すぐに提出できるパッチではないことに注意してください。