春節臨近,准備收拾行囊回家過年。由於家在農村,沒有網絡。於是想把一些自己喜歡的技術網站下載到本地,回家好好閱讀。以前就知道wget有做網站鏡像的功能,於是就折騰了一下,使用中遇到一些問題,最后得到了wget命令行:
wget -e robots=off -w 1 -x -np -p -m -k -t 1 -X/blog/user http://www.example.com/blog/
為了讓這個命令行的各選項意義更加明確,它還可以寫成:
wget --execute robots=off --wait=1 --force-directories --no-parent --page-requisites --mirror --convert-links --tries=1 --exclude /blog/user http://www.example.com/blog/
下面對其中的各選項簡要說明,做備忘之用。
‘-e command’ ‘--execute command’ 用來執行額外的.wgetrc命令。就像vim的配置存在.vimrc文件中一樣,wget也用.wgetrc文件來存放它的配置。也就是說在wget執行之前,會先執行.wgetrc文件中的配置命令。一個典型的.wgetrc文件可以參考:
http://www.gnu.org/software/wget/manual/html_node/Sample-Wgetrc.html
http://www.gnu.org/software/wget/manual/html_node/Wgetrc-Commands.html
用戶可以在不改寫.wgetrc文件的情況下,用-e選項指定額外的配置命令。如果想要制定多個配置命令,-e command1 -e command2 ... -e commandN即可。這些制定的配置命令,會在.wgetrc中所有命令之后執行,因此會覆蓋.wgetrc中相同的配置項。
這里robots=off是因為wget默認會根據網站的robots.txt進行操作,如果robots.txt里是User-agent: * Disallow: /的話,wget是做不了鏡像或者下載目錄的,使用-e robots=off參數即可繞過該限制。
-w seconds --wait=seconds 為了不給被拷貝的鏡像網站帶來太大的訪問壓力,頁面請求之間停下等待seconds時間。
-x --force-directories 創建與鏡像網站對應的目錄結構。 http://www.example.com/robots.txt這個文件下載下來時,會等到對應的www.example.com/robots.txt。與之相反的是-nd,即--no-directories,
-np --no-parent 只下載給定的目錄下的文件,不下載它的上級目錄中的文件,即使有些頁面中存在上級目錄中文件的連接。這個比較必要,如果不限定的話,本來只想下載www.example.com/blog/中的博客文章,最后很有可能將整個www.example.com都下載下來了。
-p --page-requisites 下載能顯示整個頁面需要的所有資源,包括內嵌的image以及css樣式文件。
-m --mirror
它會打開鏡像相關的選項,比如無限深度的子目錄遞歸下載。
-k --convert-links
這個選項會在整個網站下載完成后修HTML、CSS、Image等資源的鏈接關系,讓它們都指向下載下來的本地文件,從而適合本地瀏覽。
-t times --tries=times
如果某個資源下載失敗,這個選項指定了重試下載的次數。.wgetrc默認的是20次。我們在下載網站時可以將其放小,一則減少下載時間,二則減輕鏡像站點的壓力。
-X /some/dir --exclude /some/dir
可以用這個參數指定不需要下載的目錄,如果有多個需要排除的目錄,可以用逗號隔開,比如
-X /some/dir1;/some/dir2
關於wget更多的選項,可以參見官網文檔:
http://www.gnu.org/software/wget/manual/wget.html