使用 wget 但忽略 url 参数

Posted

技术标签:

【中文标题】使用 wget 但忽略 url 参数【英文标题】:Using wget but ignore url parameters 【发布时间】:2014-11-04 13:19:55 【问题描述】:

我想下载构建 URL 的网站的内容

http://www.example.com/level1/level2?option1=1&option2=2

在 URL 中,每个页面只有 http://www.example.com/level1/level2 是唯一的,并且 option1 和 option2 的值正在更改。事实上,由于这些变量,每个唯一页面都可以有数百种不同的符号。我正在使用 wget 来获取网站的所有内容。由于这个问题,我已经下载了超过 3GB 的数据。有没有办法告诉 wget 忽略 URL 问号后面的所有内容?我在手册页中找不到它。

【问题讨论】:

希望不带参数的 URL 仍然能给你带来有用的东西。 确实如此。问号后面是否有任何东西没有区别。似乎跟踪浏览器的来源。 根据 wget 手册页,此时没有使用 wget 匹配查询字符串。使用 wget 的任何具体原因,而不是像 scrapy 或 curl 这样的 shell 脚本? 不,没有什么特别的。我习惯使用 wget,但不是真正的要求。有什么替代方案的建议吗? 【参考方案1】:

您可以使用--reject-regex指定拒绝特定URL地址的模式,例如

wget --reject-regex "(.*)\?(.*)" -m -c --content-disposition http://example.com/

这将镜像网站,但会忽略带问号的地址 - 对于镜像 wiki 站点很有用。

【讨论】:

谢谢,这是最好的 wget-only 解决方案(不涉及过滤代理等其他工具)。每个 html 页面仍然会获取一次以解析链接,但它避免了使用 GET 参数重复获取+删除相同的链接,例如 Web 服务器文件列表中的标题链接。 更好的解决方案!【参考方案2】:

这对你的情况没有帮助,但对于那些已经下载了所有这些文件的人来说。您可以快速重命名文件以删除问号及其后面的所有内容,如下所示:

rename -v -n 's/[?].*//' *[?]*

上面的命令进行了试运行,并向您展示了如何重命名文件。如果试运行一切正常,请再次运行命令,不要使用 -n(nono)开关。

【讨论】:

【参考方案3】:

wget2 通过选项 --cut-url-get-vars--cut-file-get-vars 内置了这个功能。

【讨论】:

【参考方案4】:

问题解决了。我注意到我要下载的 URL 都是搜索引擎友好的,其中描述是使用破折号形成的:

http://www.example.com/main-topic/whatever-content-in-this-page

所有其他 URL 都引用了 CMS。我得到了我需要的一切

wget -r http://www.example.com -A "*-*"

这成功了。感谢您的想法分享!

【讨论】:

很高兴这对您有用,但这不能解决您最初的问题,“有没有办法告诉 wget 忽略 URL 问号后面的所有内容?” kenorb 为遇到此问题的其他人提供了最佳解决方案【参考方案5】:

@kenorb 使用--reject-regex 的回答很好。尽管在旧版本的wget 上,它在我的情况下不起作用。这是使用通配符的等价物,适用于 GNU Wget 1.12:

wget --reject "*\?*" -m -c --content-disposition http://example.com/

【讨论】:

以上是关于使用 wget 但忽略 url 参数的主要内容,如果未能解决你的问题,请参考以下文章

使用特定参数忽略robot.txt中的URL?

是否有类似于 get_queried_object() 的函数,它只获取当前存档分类术语但忽略 url 查询参数?

Linux之wget下载

转:linux常用命令之wget命令的使用

如果有参数,SpringBoot websecurity 不会忽略 url

詹金斯:传递多个“扩展参数选择”使用URL值