2011-03-09 38 views

回答

0

帶-r和-H的wget很危險,因爲它可以很容易地進入大型網站(可能通過廣告或搜索框)並跨越整個互聯網。下載所有依賴一個單頁的技巧是,你不一定要遞歸,但你想下載頁面的先決條件,以及允許wget來跨越主機,如:

wget -H -N -kp http://<site>/<document> 

然而,這個命令,現在你沒有得到遞歸行爲。

所以要將這兩者結合起來,我們可以使用第一個wget來遞歸地查找頁面,儘管只能從那個域中找到;和橫跨主機,但第二wget的不檢索頁面遞歸:

wget -mkp http://example.com 
find example.com/ -name '*.html*' -exec wget -nc -HNkp http://{} \; 

的-nc是很重要的一點 - 它告訴wget到像它從服務器上下載,但使用的本地副本你磁盤代替,這意味着引用應該已經被轉換。接下來,它將獲取所有資源;最後它應該打開原始文件(需要查詢字符串),並正確命名第二個文件。請注意,這個文件會雙重下載文件,以便它可以修復 - 但是,我被卡住的地方是-k,將它沒有下載的相對URL轉換回絕對URL。所以在第二步之後,所有的鏈接現在都是遠程網址了。

幸運的是,由於所有的絕對鏈接都應該以「http://example.com/」開頭,因此可能會更容易手動解決此問題,因此可以運行簡單的「sed」腳本來修復鏈接引用。

如果您知道您希望example.com包含的域名是使用-D選項來僅指定您希望從中下載的域名,而不是其他任何內容,那麼我會建議。例如,您也可以從google.com上添加gstatic.com。

還有一個人在這裏與a similar question,但下載遠程圖像似乎沒有得到解決。

The thread here建議只是硬着頭皮做「-r -l 1 -H」,但也可以使用-A來限制實際上得到保存圖像或CSS文件類型:

+0

與'find..'行有關的問題: 「當運行帶有'-N'的Wget時,帶或不帶'-r'或'-p',決定是否下載較新的文件的副本取決於文件的本地和遠程時間戳和大小(請參閱時間戳)。'-nc'不能與'-N'同時指定。 – cofiem 2011-11-09 10:15:29

1

略加修改的@ PatrickHorn的回答:

第一個cd進入包含下載文件的頂層目錄。

「第一wget的頁面找到遞歸,儘管只是從一個域」

wget --recursive --timestamping -l inf --no-remove-listing --page-requisites http://site.com

「第二wget的跨越主機,但不會遞歸檢索網頁」

find site.com -name '*.htm*' -exec wget --no-clobber --span-hosts --timestamping --page-requisites http://{} \;

我已經嘗試過了,而且似乎大部分工作 - 我只從我以後的站點獲取所有.htm(l)頁面,然後獲取外部文件。我還沒有能夠將鏈接更改爲相對於外部文件的本地副本。