我想递归下载网页并将输出传送到过滤器。我正在使用:
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 文件进行递归操作,并在删除之前仅管道这些文件。我将在经过合理测试和记录后发布该补丁。