将输出通过管道传输到 stdout 时,wget 不会递归

将输出通过管道传输到 stdout 时,wget 不会递归

我想递归下载网页并将输出传送到过滤器。我正在使用:

wget -qm -O- http://mywebsite.com/initialpath.php | ./filter

wget在第一页之后停止下载并等待输入,而不是解析网页并下载链接文件。如果我将输出保存到文件中,它会起作用,-O filename但我想使用过滤器动态处理网页。

我怎样才能实现这个目标?

答案1

使用当前版本似乎不可能实现我的目标wget

在研究了1.18版本的源代码后wget,我得出了以下结论:

  • wget如果它不存储下载的文件,则无法递归,至少对于 来说暂时如此--spider

  • 当传递 时-O filename,它会在每次下载后不断追加filename并重新解析整个文件,将其完全加载到内存中(或映射它)。这非常麻烦且效率低下。

  • 当传递时-O-,它会将下载的文件通过管道传输到stdout并尝试重新加载-以查找更多要获取的 URL...这会导致stdin为此目的而读取。这是实施的副作用。

我编写了一个补丁来添加更合理的管道选项,依靠--spider下载 html 和 css 文件进行递归操作,并在删除之前仅管道这些文件。我将在经过合理测试和记录后发布该补丁。

相关内容