仅仅因为您可以在浏览器中访问文件并不意味着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/