仅仅因为您可以在浏览器中访问文件并不意味着wget一定可以检索它。您的浏览器具有能够识别目录结构的代码,wget只知道您告诉它什么。
您可以先尝试将 java 文件添加到accept列表中,也许这就是它所需要的:
wget -r -A "*.java" http://text/root
但听起来您正试图获得该站点的完整离线镜像。让我们开始——就像我们试图弄清楚的任何命令一样——使用man wget:
Wget 可以跟踪HTML、XHTML 和 CSS 页面中的链接,创建远程网站的本地版本,完全重建原始站点的目录结构。这有时被称为“递归下载”。在这样做的同时,Wget 尊重机器人排除标准 (/robots.txt)。可以指示 Wget 将下载文件中的链接转换为指向本地文件,以便离线查看。
我们需要的
1. 要下载的文件的正确链接。
在您的intex.html文件中,您必须提供指向 Java 文件的链接,否则wget将无法识别为需要下载。对于您当前的目录结构,确保file2.html包含指向 java 文件的链接。将其格式化为链接到当前目录之上的目录:
<a href="../test/root/A/A1/file1.java">JavaFile</a>
但是,如果file1.java不敏感并且您经常这样做,则将index.html文件放在root目录中并链接到以下内容会更简洁且代码更少:
<a href="/A/A1/file1.java">JavaFile</a>
如果你只想要 Java 文件并想忽略 HTML,你可以--reject像这样使用:
wget -r -nH --reject="file2.html"
### Or to reject ALL html files ###
wget -r -nH --reject="*.html"
这将递归地 ( -r) 从我们指定的点开始遍历所有目录。
2. 尊重robots.txt
确保如果您的目录/robots.txt中有文件,*/root/*它不会阻止爬网。如果是这样,您需要wget使用命令中的以下选项wget通过添加来指示忽略它:
wget ... -e robots=off http://test/root
3. 将远程链接转换为本地文件。
此外,wget必须指示将链接转换为下载的文件。如果您已正确完成上述所有操作,那么您应该没问题。我发现获取所有文件的最简单方法是使用mirror命令,前提是在非公共目录后面没有隐藏任何内容。
尝试这个:
wget -mpEk http://text/root/
# If robots.txt is present:
wget -mpEk robots=off http://text/root/
首选使用-m代替,-r因为它没有最大递归深度并且它会下载所有资产。Mirror 非常擅长确定站点的完整深度,但是如果您有许多外部链接,您最终可能会下载的不仅仅是您的站点,这就是我们使用-p -E -k. 制作页面的所有先决条件文件和保留的目录结构应该是输出。-k将链接转换为本地文件。由于您应该设置一个链接,因此您应该file1.java在../A1/目录中获得一个。但是,此命令应该按原样工作,而无需将特定链接放置到您的index.html或内部的 java 文件中,file2.html但它不会受到伤害,因为它保留了目录的其余部分。镜像模式也适用于设置为ftp://还。
一般经验法则:
根据您正在做镜像的站点的一侧,您正在向服务器发送许多调用。为了防止您被列入黑名单或被切断,请使用该wait选项来限制您的下载。如果它是您发布的站点一侧的站点,则不必这样做,但是您要镜像的任何大型站点都需要使用它:
wget -mpEk --no-parent robots=off --random-wait http://text/root/