wget 获取目录中的所有文件仅返回index.html

wget 获取目录中的所有文件仅返回index.html

我是 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.htmlfor<a href=<img src=等,然后它遵循这些链接并递归地执行相同的操作。这就是 wget 的“递归”行为所指的——它递归地扫描链接,因为(重申一下),它无权访问服务器上的任何文件系统,并且服务器不必向它提供任何有关此类的信息

如果您有一个实际的.html网页,可以加载并单击访问您想要的所有内容,请从该地址开始,然后仅使用-r -np -k -p.

答案2

当您使用浏览器连接到该页面时会发生什么?

如果您浏览页面没有任何问题,那么您可能缺少一些东西。

该页面可能正在检查您的浏览器,而 Mozilla 不是正确的答案,请从以下位置选择一个浏览器字符串这里(整个字符串,不仅仅是 Mozilla)并尝试看看它是否有效。

如果没有,那么您可能需要 cookie,获取连接到主页的 cookiewget并存储它们。然后使用wget这些 cookie 并尝试下载页面。

--mirror如果您想镜像它,请尝试选项。

如果没有效果,那么我会研究连接和页面。 Firefox 的实时 http 标头附加是一个非常酷的工具。您可以看到浏览器和网页之间的整个通信。尝试使用 wget 模仿该行为以获得您正在寻找的内容。

相关内容