Я запускаю следующую команду
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
делает система.
По сути, любая загружаемая веб-страница wget
заносится в «черный список», который должен предотвратить повторную загрузку одной и той же страницы.
Проблема возникает на веб-страницах, которые используют двойное перенаправление, возвращая запрос на какую-то "проверку безопасности" и обратно. Wget не ожидает повторного перенаправления на ту же страницу, находит ее в черном списке, таким образом пропуская загрузку этой страницы.
Впервые эта проблема была упомянута в 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))
Это позволит удалять текущую страницу из черного списка каждый раз при перенаправлении, тем самым устраняя проблему.
Имейте в виду, что в некоторых случаях это может привести к возникновению бесконечных циклов, поэтому это не готовый к отправке патч.