我正在運行以下命令
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 中首次被提及 bug #37986:重定向到相同的 url 可防止遞歸 並實施了修復,但顯然該修復並未到達您的 Linux 發行版,或者在多年後丟失了。
除了尋找另一個下載器或 wget 版本之外,唯一的解決方案在這個答案。
但是,如果您願意手動重新編譯 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))
每次重定向時,這都會將當前頁面從黑名單中刪除,從而解決您的問題。
請注意,在某些情況下它可能會觸發無限循環,因此它不是一個可提交的補丁。