
好的,這就是我需要的:
- 我使用的是 Mac (Mac OS X 10.6.8)
- 我想在我的硬碟上完全鏡像一個網站(這是我用什麼作為測試)
- 我想要所有圖像和先決條件在那裡,以便網站在離線時可以瀏覽
- 我希望所有頁面中的相關連結都相應更新
- (* 可選)
.html
所有檔案的副檔名都很好,這樣瀏覽器就可以輕鬆識別和開啟它們
這就是我正在使用的:
wget --recursive --no-clobber --page-requisites --convert-links --html-extension --domains wikispaces.com http://chessprogramming.wikispaces.com/
事情是 :
.css
文件和圖像等似乎沒有被下載 - 至少,達到我離開運行的水平(好吧,也許他們會如果該過程完成則下載,所以我們可以跳過這一點)- 沒有新增 html 副檔名
- 連結未轉換
那麼...有什麼想法嗎?
答案1
首先,這似乎是 OS X 獨有的問題。我可以在 Ubuntu 14.04 LTS 上使用上述命令,並且它開箱即用!一些建議:
.css
文件和圖像等似乎沒有被下載 - 至少,直到我離開運行的級別(好吧,如果該過程完成,也許它們會被下載,所以我們可以跳過這一點)
當您選擇 時
--domains wikispaces.com
,您將不會下載位於其他網域的連結 CSS 檔案。網站上的一些樣式表位於http://c1.wikicdn.com
的來源所示index.html
。某些網站不允許您直接使用其連結存取其連結檔案(引用的圖像)(請參閱這一頁)。您只能透過網站查看它們。但這裡的情況似乎並非如此。
Wget 在解析 HTML 時似乎無法辨識註解。當 Wget 運行時,我看到以下內容:
--2016-07-01 04:01:12-- http://chessprogramming.wikispaces.com/%3C%25-%20ws.context.user.imageUrlPrefix%20%25%3Elg.jpg Reusing existing connection to chessprogramming.wikispaces.com:80. HTTP request sent, awaiting response... 404 Not Found 2016-07-01 04:01:14 ERROR 404: Not Found.
在瀏覽器中開啟連結會將您帶到登入頁面。該文件的名稱表示它出現在註釋中的某個位置。
許多網站不允許使用下載管理器下載,因此它們會檢查哪個客戶端發起了 HTTP 請求(包括瀏覽器或您用於從其伺服器請求檔案的任何用戶端)。
用於
-U somebrowser
偽造客戶端並冒充瀏覽器。例如,-U mozilla
可以新增告訴伺服器 Mozilla/Firefox 正在請求該頁面。然而,這不是這裡的問題,因為我可以在沒有這個參數的情況下下載網站。下載和請求率很重要。伺服器不希望其效能因機器人從其網站請求資料而變得臃腫。在 Wget 中使用
--limit-rate=
和--wait=
參數來限制下載速率,並在為各個檔案產生 get 請求之間等待幾秒鐘。例如
wget -r --wait=5 --limit-rate=100K <other arguments>
在 get 請求之間等待 5 秒並將下載速率限制為 100Kbps。再說一次,這不是這裡的問題,因為伺服器不需要我限制下載速率來取得網站。
這裡最可能的情況是(1)。替換--domains wikispaces.com
為--domains *
並重試。讓我們看看我們得到了什麼。您至少應該能夠取得 CSS 文件。
沒有新增 html 副檔名
當我運行命令時,正在添加 HTML 擴充功能。
連結未轉換
我不認為我在這裡完全正確,但不要指望當您鏡像網站時連結可以開箱即用。
當您將參數傳遞給 HTTP get 請求時(例如http://chessprogramming.wikispaces.com/wiki/xmla?v=rss_2_0
具有參數v=rss_2_0
),該請求將由伺服器上執行的某些腳本處理,例如 PHP。這些參數將幫助您根據參數取得正確的腳本版本。請記住,當您鏡像網站時,特別是在 PHP 上運行的 Wiki,您無法準確地鏡子一個網站,除非您取得原始 PHP 腳本。 PHP 腳本傳回的 HTML 頁面只是您可以透過該腳本看到的頁面的一方面。正確的演算法是產生該頁面儲存在伺服器上,只有在取得原始 PHP 檔案時才會正確鏡像,而使用 HTTP 則無法做到這一點。為此,您需要透過 FTP 存取伺服器。
希望這可以幫助。
答案2
選項 1 來自用戶612013的回答就我而言,這肯定是問題所在。事實上,它只是出錯了,因為我請求https://censoreddomain.com
而不是https://www.censoreddomain.com
(注意www.
)。添加後www.
,wget
我很高興地為我抓取了整個網站。所以重要的是與您嘗試抓取的網域名稱的規範名稱完全匹配。
由於錯誤是我的,我認為這個「陷阱」適用於wget
所有平台,而不僅僅是 OS X。