
我正在嘗試使用命令下載網站:
wget -r -l 0 -p -k -m -e robots=off --restrict-file-names=nocontrol,unix http://example.com
當它找到連結時,例如 ,http://example.com/direction
它會在磁碟上建立一個文件./example.com/direction
然後,例如,它在“direction”中找到一些其他文件(連結),假設http://example.com/direction/11
並用一些 HTMLwget
重寫舊文件./example.com/direction
,並將其轉換到目錄中。並在那裡寫入新文件./example.com/direction/11
。
如果它在裡面找到新文件/direction/11
,那麼它也會重寫11
並將其轉換到目錄中。
所以,看來我遺失了所有目錄索引檔。
wget本身的問題有解決方案嗎?
答案1
這可能並不適用於所有情況,但我能夠使用有點意想不到的標籤來解決這個問題。
來自 wget 1.17.1 手冊:
‘-E’
‘--adjust-extension’
‘application/xhtml+xml’
如果下載了or類型的檔案‘text/html’
且 URL 不以 regexp 結尾‘\.[Hh][Tt][Mm][Ll]?’
,則此選項將導致後綴‘.html’
附加到本機檔案名稱。
因此,在您的情況下,當 wget 找到 link 時http://example.com/direction
,它將檢查該頁面是否為 html 格式。如果有,它會將其保存到本機磁碟/example.com/direction.html
。然後,當它看到 時http://example.com/direction/11
,會將其儲存到磁碟上/example.com/direction/11
,從而不會覆蓋第一個檔案。假設真實的目錄結構是/example.com/direction/index.html
,它不會完全符合遠端目錄結構,但至少不會錯誤地覆蓋檔案。
答案2
嗯,僅使用 Wget 來解決這個問題幾乎是不可能的。讓我先試著向您解釋一下這個問題。
首先 Wget 嘗試下載http://site.com/direction
.當 Wget 發送對此路徑的請求時,伺服器會使用 中可用的資料回應http://site/com/example/index.html
。然而,此時,Wget 並不知道發送給它的資料對應於路徑:example/index.html。現在,當 Wget 找到另一個檔案 時,http://site.com/example/11
同樣的事情會再次發生。但是,它必須先建立目錄 example/ 並無條件刪除舊檔案才能執行此操作。 IMO,Wget 應該檢測是否用目錄替換檔案並將該檔案儲存為索引檔案。但是,到目前為止還沒有。