我正在从特定节点下的网站下载所有文件。
wget \
--recursive \
--no-clobber \
--page-requisites \
--html-extension \
--convert-links \
--domains www.___.uk \
--no-parent \
http://www.___.uk/____/
当 wget 找到某个文件的链接时,是否可以告诉 wget 还下载父目录(以及祖父目录等)的索引列表以及从这些页面链接到的所有其他文件?
例如:
download /index.html (1 new link found)
download /pdfs/foo.pdf
download /pdfs/ (1 new link found)
download /pdfs/bar.pdf
答案1
您描述需求和解决方案的方式看起来就像是在思考一种算法,我认为您无法从 wget 获得该算法。它能做的和主要做的事情是查看网页,下载链接到该网页的任何文件,以及从该网页链接到的任何网页以及这些网页链接到的任何文件。
考虑到您下载(父)页面的条件,如果/条件是,有一个文件..事实是,抛开条件方面,wget 甚至不一定能够转到 - 下载 - 给定要下载的网页的父页面,因为它不是那样工作的。它只能看到链接到的内容。就像它只能下载它看到链接的文件一样。
如果每个目录中的网页都是包含目录索引页的类型,. and ..
那么 wget 将能够下载网页并沿目录树向后递归。(除非您执行 -H,否则它不会到达外部主机),但我想如果你不想一路下载整个网站,那么你会想要使用 -np,然后它就根本无法返回/向上目录树,无法返回到您为 wget 指定的网页地址之上。
让我们假设 wget 可以向后移动(并且在一定程度上可以,如上段所述),首先,我认为你不能说“如果有文件,则只下载父目录”。但除此之外。我认为如果你下载一个没有文件的网页,那也没关系。网页,即 htm/html 文件,只是一些标记和一些链接,它不会占用太多空间。
您可以做的是下载整个网站,只要 wget 允许(wget 无法对目录执行 ls/dir 并查看其中的所有内容。它只知道链接到的内容,并会给出一个网页作为开始)。您可以下载全部内容。然后着手修复本地副本。删除不需要的目录、不需要的网页等,也许可以自动执行其中的一些操作。
我认为您目前的问题令人困惑……关于 wget 如何运行。我希望这能有所帮助,也许您可以重新考虑您希望 wget 做什么。
如果您希望 wget 下载这两个文件,您需要一个直接或间接链接到这两个文件的网页,即指向另一个链接到这两个文件的网页。wget 实际上不会向前或向后移动。它不是那样工作的。但可以告诉它不要超出某个点。虽然默认设置是不递归访问外部主机,但可以使用 -H 告诉它可以递归访问外部主机。
也许 Curl 可以做 wget 做不到的、与你想要的有关的事情,但我不知道。我怀疑 wget 能做到。但请考虑 wget 工作方式中的其他解决方案,我已经对此进行了一些描述。
例如,如果您下载了整个网站,或者甚至不是整个网站,但只是下载了比您想要的更多内容,那么您在本地将拥有更多权力,因为您可以对已有的内容执行 ls/dir,获取不错的列表,删除您不想要的内容,实现自动化。您可能还需要重新考虑您希望 wget 执行的操作。