Wget 不会递归下载

Wget 不会递归下载

我正在尝试复制具有以下目录结构的论坛帖子:

第一页的 URL 如下:

https://some.site.com/foo/bar/threadNumber

其余页面遵循以下格式:

https://some.site.com/foo/bar/threadNumber/page/2
https://some.site.com/foo/bar/threadNumber/page/3
https://some.site.com/foo/bar/threadNumber/page/*

我正在使用命令:

wget --recursive --page-requisites --adjust-extension --no-parent --convert-links https://some.site.com/foo/bar/threadNumber

这个命令可以很好地复制任何单个 URL。但是,我想放入更高的目录,并获取所有/page/*文件。我不需要更高的目录,除了较低的/page/文件之外什么都不需要。我也参与--mirror其中,但没有成功。

你知道为什么这个命令不会降低下载其余页面的速度吗?

答案1

递归下载带有安全检查的链接会导致循环重定向。

该命令不起作用,因为您的网站使用双重重定向,这使 wget 感到困惑。让我们看一下可以使用该--debug选项调用的详细日志(删除了不相关的行):

---request begin---
GET /<URL> HTTP/1.1
---response begin---
HTTP/1.1 302 Found
Location: https://community.lego.com/auth/securityCheck?action=bounce&referrer=https%3A%2F%2Fcommunity.lego.com%2F<URL>
(...)
---request begin---
GET /auth/securityCheck?referrer=https%3A%2F%2Fcommunity.lego.com%2F<URL> HTTP/1.1
---response begin---
HTTP/1.1 302 Found
Location: https://community.lego.com/<URL>
(...)
Deciding whether to enqueue "https://community.lego.com/<URL>".
Already on the black list.
Decided NOT to load it.
Redirection "https://community.lego.com/<URL>" failed the test.

如图所示,它会将您的请求退回到某些“安全检查”并返回。 Wget 不希望第二次重定向到您来自的同一页面,并将其视为黑名单,因此不会跟踪任何链接。

虽然绝对有可能有一种方法可以执行一些 cookie 魔法来防止安全检查重定向发生,但我不知道该怎么做。

不过,如果你愿意的话重新编译手动 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))

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

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

一旦你重建了 wget,你就可以使用类似的东西 wget -np -nd -r -k -p <url> 来按预期获取整个线程。

答案2

试试这个:

wget -nv --mirror --span-hosts --convert-links --adjust-extension --page-requisites --no-parent https://some.site.com/foo/bar/threadNumber

此命令获取包含来自所有站点的所有元素的整个线程。--accept html,gif,png,jpg,jpeg例如,您可以按类型限制它。

答案3

只是在这里大声思考......像 webhttrack 这样的东西怎么样?或者首先运行jmeter - >导出链接列表 - >然后使用wget或curl?

更新 刚刚用 webhttrack 进行了测试,它正在工作,并且可以在 CLI 和 Gui 中使用......

相关内容