首页 > 解决方案 > 捕获由页面重定向的下载链接 (WGET)

问题描述

这是我的问题。

我目前正在为我编写一个脚本,它可以自动下载一些我用来“清理”我的计算机的软件。

我已经能够使用像这样的下载 URL 进行下载:“ https://www.driverscloud.com/plugins/DriversCloud_Win.exe ”,但不能使用在像这样等待一小段时间后重定向到下载 URL 的 URL :“ https://www.ccleaner.com/fr-fr/ccleaner/download/standard ”。

我可以看到问题在于我没有向 Wget 提供直接下载地址,但我希望能够使用地址“ https://www.ccleaner.com/fr-fr/ccleaner/download /standard " 因为 Piriform(Ccleaner 的开发者)会定期更新软件,并且下载地址会根据版本号而变化(例如:https ://download.ccleaner.com/ccsetup547.exe -> https://download. ccleaner.com/ccsetup548.exe)。

那么我怎么能要求 Wget 获取页面中包含的下载链接而不是下载页面本身(因为我在 URL 的末尾得到一个名为“标准”的文件“ https://www.ccleaner.com/fr -fr/ccleaner/下载/标准“?

如果您使用 Wget 或其他工具(如 Curl :) 为我提供解决方案,我会很高兴。

先感谢您。

标签: windowsurlredirectdownloadwget

解决方案


你不需要 PHP。wget独自一人就足以完成这项简单的工作:)

这是您需要的命令(我将在下面进行细分):

$ wget -r -l 1 --span-hosts --accept-regex='.*download.ccleaner.com/.*.exe' -erobots=off -nH https://www.ccleaner.com/fr-fr/ccleaner/download/standard

现在,详细了解它的作用:

  • -r: 启用递归,因为我们想跟随提供页面上的链接
  • -l 1:我们只想递归一层,因为所需的 URL 在同一页面上
  • --span-hosts:所需文件与我们提供的原始 URL 位于不同的主机上。所以我们要求 wget 在使用递归时跨主机
  • --accept-regex=...:这指定将通过递归访问的链接的正则表达式。由于我们只想要一个文件并且知道模式,因此我们制作了非常具体的正则表达式。
  • -erobots=offdownload.ccleaner.com主机有一个robots.txt禁止所有用户代理的。但是我们没有抓取域,所以禁用尊重机器人文件
  • -nH:不要创建特定于主机的目录。这意味着exe现在将直接下载到您的当前文件夹中。

如果您想要更多的自动化,您还可以&& rm -r fr-fr/在上面的命令中附加一个以删除您下载的基本页面以获得正确的链接。

享受!

编辑:由于 OP 在 Windows 上,这里有一个专门用于在 Windows 上运行的更新命令。它不会单引号正则表达式字符串,因为这会导致 Windows shell 将正则表达式作为带单引号的字符串传递。

$ wget -r -l 1 --span-hosts --accept-regex=.*download.ccleaner.com/.*.exe -erobots=off -nH https://www.ccleaner.com/fr-fr/ccleaner/download/standard

推荐阅读