windows - 捕获由页面重定向的下载链接 (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 :) 为我提供解决方案,我会很高兴。
先感谢您。
解决方案
你不需要 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=off
:download.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
推荐阅读
- ios - 从 JSON 响应填充 tableview 部分和行
- javascript - z-index 已应用,但未按顺序堆叠元素
- r - 两个 R 图之间的同步交互性(情节和传单)
- python - ValueError:检查目标时出错:预期dense_44的形状为(1,),但数组的形状为(3,)
- javascript - 中继:查询中断,没有任何错误迹象
- angular - 使用 Angular 显示表格时出错
- php - Symfony 资产不包括样式表
- json.net - 解决 NewtonSoft.Json 的冲突版本要求
- java - 运行重绘方法后 JAVA swing gui 窗口受到震动
- regex - 如何使用 .htaccess 检查 URL 参数是否存在?