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这样做的。

基本上,任何正在下载的网页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))

每次重定向时,都会将当前页面从黑名单中删除,从而解决您的问题。

请注意,在某些情况下它可能会触发无限循环,因此它不是一个可提交的补丁。

相关内容