我是 bash 的新手,我一直在尝试将wget
所有文件从网站传输到我正在处理的服务器上。然而我得到的只是一个index.html
文件。我让它运行了 15 分钟,但 index.html 文件仍在下载,所以我终止了它。我的文件可以在index.html
文件之后下载吗?
这是我一直在尝试的代码:
$ wget --no-parent -R index.html -A "Sample" -nd --random-wait \
-r -p -e robots=off -U Mozilla --no-check-certificate \
http://somewebsite.com/hasSamples/Sample0
我正在尝试下载以 Sample 开头的子目录中的所有文件。我在互联网上进行了大量搜索以找到解决方案,此时我被难住了。我可能只是还没有找到正确的选项组合,但任何帮助将不胜感激。以下是我对代码的理解:
--no-parent
意味着不搜索父目录-R index.html
意味着拒绝下载index.html文件,我也尝试了“index.html*”,但它仍然下载了它-A "Sample"
有点像 bash 中的 Sample* 一样-nd
意味着下载文件而不是任何目录--random-wait
确保您不会被网站列入黑名单-r
递归下载-p
真的不确定-e robots=off
忽略 robots.txt 文件U Mozilla
我认为让用户看起来像 Mozilla- 这
--no-check-certificate
对于网站来说是必需的。
答案1
-“示例”的行为类似于 bash 中的示例*
不是根据我的阅读man wget
:
- -A acclist --接受 acclist
- -R 拒绝列表 --拒绝拒绝列表
指定要接受或拒绝的以逗号分隔的文件名后缀或模式列表。请注意,如果任何通配符 *、?、[ 或 ] 出现在 acclist 或 rejlist 的元素中,它将被视为一种模式,而不是后缀。
所以你的用法(没有通配符)相当于 bash glob *.Sample
。
Wget 通过扫描链接来工作,这可能就是它尝试下载一个文件的原因index.html
(你还没有说它的内容是什么,如果有的话,只是花了很长时间)——它必须有一个开始的地方。进一步解释一下:一个网址是不是文件路径。你不能扫描 Web 服务器,就好像它是目录层次结构一样,说“给我目录中的所有文件foobar
”。如果foobar
对应于真实目录(当然不必如此,因为它是 URL 的一部分,而不是文件路径),则为 Web 服务器可能配置为提供自动生成的 index.html 列出文件,提供您可以浏览文件系统的错觉。但这不是 HTTP 协议的一部分,它只是像 apache 这样的服务器默认使用的约定。因此,wget
所做的就是扫描,例如index.html
for<a href=
和<img src=
等,然后它遵循这些链接并递归地执行相同的操作。这就是 wget 的“递归”行为所指的——它递归地扫描链接,因为(重申一下),它无权访问服务器上的任何文件系统,并且服务器不必向它提供任何有关此类的信息。
如果您有一个实际的.html
网页,可以加载并单击访问您想要的所有内容,请从该地址开始,然后仅使用-r -np -k -p
.
答案2
当您使用浏览器连接到该页面时会发生什么?
如果您浏览页面没有任何问题,那么您可能缺少一些东西。
该页面可能正在检查您的浏览器,而 Mozilla 不是正确的答案,请从以下位置选择一个浏览器字符串这里(整个字符串,不仅仅是 Mozilla)并尝试看看它是否有效。
如果没有,那么您可能需要 cookie,获取连接到主页的 cookiewget
并存储它们。然后使用wget
这些 cookie 并尝试下载页面。
--mirror
如果您想镜像它,请尝试选项。
如果没有效果,那么我会研究连接和页面。 Firefox 的实时 http 标头附加是一个非常酷的工具。您可以看到浏览器和网页之间的整个通信。尝试使用 wget 模仿该行为以获得您正在寻找的内容。