Wget
將輸出通過管道傳輸到 stdout 時 wget 不會遞歸
我想遞歸下載網頁並將輸出傳遞給過濾器。我在用:
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 文件進行遞歸操作,並在刪除這些文件之前只對它們進行管道傳輸。我會在經過合理測試和記錄後發布更新檔。