Wget

將輸出通過管道傳輸到 stdout 時 wget 不會遞歸

  • October 30, 2021

我想遞歸下載網頁並將輸出傳遞給過濾器。我在用:

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

但是wget在第一頁之後停止下載並等待輸入而不是解析網頁並下載連結文件。如果我將輸出保存到一個文件中,它可以工作,-O filename但我想使用過濾器動態處理網頁。

我怎樣才能做到這一點?

使用目前版本的wget.

在研究了 1.18 版本的原始碼後wget,我得出了以下結論:

  • wget如果它不儲存下載的文件,則不能遞歸,至少暫時如--spider.
  • 當通過時-O filename,它會在每次下載後繼續附加filename並重新解析整個文件,將其完全載入到記憶體中(或映射它)。這是非常麻煩和低效的。
  • 傳遞時-O-,它將下載的文件通過管道傳輸到stdout並嘗試重新載入-以查找更多要獲取的 url… 這導致stdin為此目的被讀取。這是實施的副作用。

我寫了一個更新檔來添加一個更明智的管道選項,依靠--spider下載 html 和 css 文件進行遞歸操作,並在刪除這些文件之前只對它們進行管道傳輸。我會在經過合理測試和記錄後發布更新檔。

引用自:https://serverfault.com/questions/1082147