wget下载总结
wget命令用來從指定的URL下載文件。wget非常穩定,它在帶寬很窄的情況下和不穩定網絡中有很強的適應性,如果是由于網絡的原因下載失敗,wget會不斷的嘗試,直到整個文件下載完畢。如果是服務器打斷下載過程,它會再次聯到服務器上從停止的地方繼續下載。這對從那些限定了鏈接時間的服務器上下載大文件非常有用。
命令格式:
wget [參數列表] [目標軟件、網頁的網址]
-a<日志文件>:在指定的日志文件中記錄資料的執行過程; -A <后綴名>:指定要下載文件的后綴名,多個后綴名之間使用逗號進行分隔; -R <后綴名>:指定拒絕下載的后綴名,多個后綴名之間使用逗號進行分隔; -b:進行后臺的方式運行wget; -B<連接地址>:設置參考的連接地址的基地地址; -c:繼續執行上次終端的任務; -C<標志>:設置服務器數據塊功能標志on為激活,off為關閉,默認值為on; -d:調試模式運行指令; -D<域名列表>:設置順著的域名列表,域名之間用“,”分隔; -e<指令>:作為文件“.wgetrc”中的一部分執行指定的指令; -h:顯示指令幫助信息; -i<文件>:從指定文件獲取要下載的URL地址; -l<目錄列表>:設置順著的目錄列表,多個目錄用“,”分隔; -L:僅順著關聯的連接; -r:遞歸下載方式; -nc:文件存在時,下載文件不覆蓋原有文件; -nv:下載時只顯示更新和出錯信息,不顯示指令的詳細執行過程; -q:不顯示指令執行過程; -nh:不查詢主機名稱; -v:顯示詳細執行過程; -V:顯示版本信息; --passive-ftp:使用被動模式PASV連接FTP服務器; --follow-ftp:從HTML文件中下載FTP連接文件。1、用Wget下載單個文件
從網絡下載一個文件并保存在當前目錄,在下載的過程中會顯示進度條,包含(下載完成百分比,已經下載的字節,當前下載速度,剩余下載時間)。
wget http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz2、指定下載文件的文件名
wget默認會以最后一個符合”/”的后面的字符來命令,對于動態鏈接的下載通常文件名會不正確。
錯誤:下面的例子會下載一個文件并以名稱download.php?id=1080保存
即使下載的文件是zip格式,它仍然以download.php?id=1080命令。
正確:為了解決這個問題,我們可以使用參數-O來指定一個文件名:
3、限速下載
當你執行wget的時候,它默認會占用全部可能的寬帶下載。但是當你準備下載一個大文件,而你還需要下載其它文件時就有必要限速了。
wget –limit-rate=300k http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.g4、斷點續傳
當你在下載一個大文件時突然中斷了那么這個選項就派上用場了
wget -c http://cn.wordpress.org/http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz5、后臺下載用wget -b
用此選項下載時只會初始化下載而不會顯示相關信息
wget -b http://www.linuxde.net/testfile.zip查看下載進度:
tail -f wget-log6、偽裝代理名稱下載(agent)
有些網站能通過根據判斷代理名稱不是瀏覽器而拒絕你的下載請求。不過你可以通過–user-agent參數偽裝。
wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.linuxde.net/testfile.zip7、測試下載鏈接
wget --spider URL如果所給URL是正確的則會顯示
Spider mode enabled. Check if remote file exists. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Remote file exists and could contain further links, but recursion is disabled -- not retrieving.否則顯示
wget --spider url Spider mode enabled. Check if remote file exists. HTTP request sent, awaiting response... 404 Not Found Remote file does not exist -- broken link!!!8、增加重連次數用
在網絡有問題的情況次選項尤其有用,默認是wget會重連20次以成功完成下載,我們可以把他增加為我們期待的次數
wget --tries=100 DOWNLOAD-URL9、下載多個文件
首先把所有要下載的文件或者URL存到一個記事本中,比如aa.txt,里面內容如下
URL1 URL2 URL3 URL4接下來輸入如下代碼就可以批量下載了
wget -i aa.txt10、下載一個完整的網站用
以下實現是你想完整的下載一個網站用于本地瀏覽
wget --mirror -p --convert-links -P LOCAL-DIR WEBSITE-URL–mirror:打開鏡像選項
-p:下載所有用于顯示給定網址所必須的文件
–convert-links:下載以后,轉換鏈接用于本地顯示
-P LOCAL_DIR:保存所有的文件或目錄到指定的目錄下
11、保存輸出到日志文件而不是標準輸出用
當你想要把信息保存到一個文件而不是在終端顯示時用以下代碼。
wget -o download.log DOWNLOAD-URL12、當超過指定大小時終止下載用
當文件已下載10M,此時你想停止下載可以使用下面的命令行
wget -Q10m -i FILE-WHICH-HAS-URLS注意:此選項只能在下載多個文件時有用,當你下載一個文件時沒用。
13、下載特定文件類型的文件用
你可以用此方法下載一下文件:
~從一個網站下載所有圖片
~從一個網站下載所有視頻
~從一個網站下載所有PDF文件
wget -r -A.pdf http://url-to-webpage-with-pdfs/14、指定不下載某一類型的文件用
你發現一個網站很有用,但是你不想下載上面的圖片,因為太占流量,此時你可以用如下命令。
wget --reject=gif WEBSITE-TO-BE-DOWNLOADED15、用wget實現FTP下載
匿名FTP下載用
wget ftp-url有用戶名和密碼的FTP下載
wget --ftp-user=USERNAME --ftp-password=PASSWORD DOWNLOAD-URL16、wget下載有的資源時必須用選項 --no-check-certificate,否則會提示沒有認證不允許下載
wget --no-check-certificate URL17、密碼和認證。
wget只能處理利用用戶名/密碼方式限制訪問的網站,可以利用兩個參數:
--http-user=USER 設置HTTP用戶–http-passwd=PASS 設置HTTP密碼對于需要證書做認證的網站,就只能利用其他下載工具了,例如curl。
18、利用代理服務器進行下載
如果用戶的網絡需要經過代理服務器,那么可以讓wget通過代理服務器進行文件的下載。此時需要在當前用戶的目錄下創建一個 .wgetrc 文件。文件中可以設置代理服務器:
http-proxy = 111.111.111.111:8080ftp-proxy = 111.111.111.111:8080分別表示http的代理服務器和ftp的代理服務器。如果代理服務器需要密碼則使用:
–proxy-user=USER 設置代理用戶–proxy-passwd=PASS 設置代理密碼這兩個參數。
使用參數 –proxy=on/off 使用或者關閉代理。
19、設定下載時間
如果你需要在你的辦公電腦上通過和其他同事共享的一個連接來下載一些很大的文件,而且你希望你的同事不會因為網絡速度的減慢而收到影響,那你就應該盡量避開高峰時段。當然,不需要在辦公室里等到所以人都走掉,也不需要在家里用完晚飯后還惦記著要上網下載一次。
用at來就可以很好的定制工作時間:
$ at 2300 warning: commands will be executed using /bin/sh at> wget http://place.your.url/here at> press Ctrl-D這樣,我們設定了下載工作在晚上11點進行。為了使這個安排能夠正常進行,請確認atd這個后臺程序正在運行。
20、定時下載
當你需要下載大量的數據,而且你又沒有享有足夠的帶寬,這個時候你會經常發現在你安排的下載任務還沒有完成,一天的工作卻又要開始了。
作為一個好同事,你只能停掉了這些任務,而開始另外的工作。然后你又需要反復地重復使用”wget -c”來完成你的下載。這樣肯定太繁瑣了,所以最好是用crontab來自動執行。創建一個純文本文件,叫做”crontab.txt”,包含下面的內容:
0 23 * * 1-5 wget -c -N http://place.your.url/here 0 6 * * 1-5 killall wget這個crontab文件指定某些任務定期地執行。前五列聲明是什么時候執行這個命令,而每行的剩余部分則告訴crontab執行什么內容。
前兩列指定了每天一到晚上11點就開始用wget下載,一到早上6點就停止一切wget下載。第三四列的*表示每個月的每一天都執行這個任務。第五列則指定了一個星期的哪幾天來執行這個程序。 –”1-5″表示從星期一到星期五。
這樣在每個工作日的晚上11點,下載工作開始,到了上午的6點,任何的wget任務就被停掉了。你可以用下面的命令來執行crontab:
$ crontab crontab.txtwget的這個“-N”參數將會檢查目標文件的時間戳,如果匹配了,下載程序就會停止,因為它說明整個文件已經下載完全了。
用“crontab -r”可以刪除這個計劃安排。我已經多次采用這種方法,通過共享的電話撥號來下載過很多的ISO鏡像文件,還是比較實用的。
21、下載動態變化的頁面
有些網頁每天都要根據要求變化好幾次。所以從技術上講,目標不再是一個文件,它沒有文件長度,因此”-c”這個參數也就失去了意義。
例如:一個PHP寫的并且經常變動的linux周末新聞網頁:
$ wget http://lwn.net/bigpage.php3我辦公室里的網絡條件經常很差,給我的下載帶了很大的麻煩,所以我寫了個簡單的腳本來檢測動態頁面是否已經完全更新了。
#!/bin/bash #create it if absent touch bigpage.php3#check if we got the whole thing while ! grep -qi bigpage.php3 do rm -f bigpage.php3#download LWN in one big page wget http://lwn.net/bigpage.php3done這個腳本能夠保證持續的下載該網頁,直到網頁里面出現了””,這就表示該文件已經完全更新了.
22、對于ssl和Cookies怎么辦?
如果你要通過ssl來上網,那么網站地址應該是以 https: 來開頭的,在這樣的情況下你就需要另外一種下載工具,叫做curl,它能夠很容易獲得.有些網站迫使網友在瀏覽的時候必須使用cookie。所以你必須從在網站上得到的那個Cookie里面得到“Cookie:”這個參數.這樣才能保證下載的參數正確。對于lynx和Mozilla的Cookie的文件格式,用下面的:
$ cookie=$( grep nytimes ~/.lynx_cookies |awk {printf(”%s=%s;”,$6,$7)} )就可以構造一個請求Cookie來下載 http://www.nytimes.com 上的內容。當然,你要已經用這個瀏覽器在該網站上完成注冊。
w3m使用了一種不同的,更小巧的Cookie文件格式:
$ cookie=$( grep nytimes ~/.w3m/cookie |awk {printf(”%s=%s;”,$2,$3)} )現在就可以用這種方法來下載了:
$ wget –header="Cookie: $cookie" http://www.nytimes.com/reuters/technology/tech-tech-supercomput.html或者用curl工具:
$ curl -v -b $cookie -o supercomp.html http://www.nytimes.com/reuters/technology/tech-tech-supercomput.htm23、如何建立地址列表?
到現在為止我們下載的都是單個文件或者是整個網站.有的時候我們需要下載某個網頁上鏈接的大量文件,但沒有必要把它整個網站都鏡像下來.比如說我們想從一個依次排列的100首歌里面下載前20首.注意,這里”–accept”和”–reject”參數是不會起作用的,因為他們只對文件操作起作用.所以一定要用”lynx -dump”參數來代替。
$ lynx -dump ftp://ftp.xxx.com/pub/lg/ |grep gz$ |tail -10 |awk {print $2} > urllist.txtlynx的輸出結果可以被各種GNU文本處理工具過慮.在上面的例子里,我們的鏈接地址是以”gz”結尾的,并且把最后10個文件地址放到 urllist.txt文件里.然后我們可以寫一個簡單的bash腳本來自動下載這個文件里的目標文件:
$ for x in $(cat urllist.txt) > do > wget $x > done這樣我們就能夠成功下載Linux Gazette網站(ftp://ftp.xxx.com/pub/lg/)上的最新10個論題。
24、擴大使用的帶寬
如果你選擇下載一個受帶寬限制的文件,那你的下載會因為服務器端的限制而變得很慢.下面這個技巧會大大縮短下載的過程.但這個技巧 需要你使用curl并且遠程服務器有多個鏡像可以供你下載.例如,假設你想從下面的三個地址下載Mandrake 10.0:
url1=http://ftp.eecs.umich.edu/pub/linux/mandrake/iso/Mandrake10.0-inst.iso
url2=http://ftp.rpmfind.net/linux/Mandrake/iso/Mandrake10.0-inst.iso
url3=http://ftp.wayne.edu/linux/mandrake/iso/Mandrake10.0-inst.iso
這個文件的長度是677281792個字節,所以用curl程序加”–range”參數來建立三個同時進行的下載:
$ curl -r 0-199999999 -o mdk-iso.part1 $url1 & $ curl -r 200000000-399999999 -o mdk-iso.part2 $url2 & $ curl -r 400000000- -o mdk-iso.part3 $url3 &這樣就創建了三個后臺進程.每個進程從不同的服務器傳輸這個ISO文件的不同部分.這個”-r”參數指定目標文件的字節范圍.當這三個 進程結束后,用一個簡單的cat命令來把這三個文件銜接起來– cat mdk-iso.part? > mdk-80.iso.(強烈建議在刻盤之前先檢查md5) 你也可以用”–verbose”參數來使每個curl進程都有自己的窗口來顯示傳輸的過程。
wget還有很多有用的功能,需要您來挖掘。
總結
- 上一篇: 用wget下载文件
- 下一篇: html代码雨特效代码,简易代码雨特效