python wget_python wget下载文件
os.system('wget '+args)
wget常用參數(shù)
-c 斷點(diǎn)續(xù)傳
-t NUMBER 最大嘗試連接次數(shù)(--tries=NUMBER)
-T SECONDS 響應(yīng)超時(shí)秒數(shù) (--timeout=SECONDS)
-P PREFIX 將文件保存在目錄(--directory-prefix=PREFIX)
轉(zhuǎn)載:
wget是一個(gè)從網(wǎng)絡(luò)上自動(dòng)下載文件的自由工具。它支持HTTP,HTTPS和FTP協(xié)議,可以使用HTTP代理.
所謂的自動(dòng)下載是指,wget可以在用戶退出系統(tǒng)的之后在后臺(tái)執(zhí)行。這意味這你可以登錄系統(tǒng),啟動(dòng)一個(gè)wget下載任務(wù),然后退出系統(tǒng),wget將在后臺(tái)執(zhí)行直到任務(wù)完成,相對(duì)于其它大部分瀏覽器在下載大量數(shù)據(jù)時(shí)需要用戶一直的參與,這省去了極大的麻煩。
wget 可以跟蹤HTML頁(yè)面上的鏈接依次下載來創(chuàng)建遠(yuǎn)程服務(wù)器的本地版本,完全重建原始站點(diǎn)的目錄結(jié)構(gòu)。這又常被稱作"遞歸下載"。在遞歸下載的時(shí)候,wget 遵循Robot Exclusion標(biāo)準(zhǔn)(/robots.txt). wget可以在下載的同時(shí),將鏈接轉(zhuǎn)換成指向本地文件,以方便離線瀏覽。
wget 非常穩(wěn)定,它在帶寬很窄的情況下和不穩(wěn)定網(wǎng)絡(luò)中有很強(qiáng)的適應(yīng)性.如果是由于網(wǎng)絡(luò)的原因下載失敗,wget會(huì)不斷的嘗試,直到整個(gè)文件下載完畢。如果是服務(wù)器打斷下載過程,它會(huì)再次聯(lián)到服務(wù)器上從停止的地方繼續(xù)下載。這對(duì)從那些限定了鏈接時(shí)間的服務(wù)器上下載大文件非常有用。
wget的常見用法
wget雖然功能強(qiáng)大,但是使用起來還是比較簡(jiǎn)單的,
基本的語法是:wget [參數(shù)列表] "URL" 用""引起來可以避免因URL中有特殊字符造成的下載出錯(cuò)。
下面就結(jié)合具體的例子來說明一下wget的用法。
1、下載整個(gè)http或者ftp站點(diǎn)。
wget?http://place.your.url/here
這個(gè)命令可以將http://place.your.url/here?首頁(yè)下載下來。使用-x會(huì)強(qiáng)制建立服務(wù)器上一模一樣的目錄,如果使用-nd參數(shù),那么服務(wù)器上下載的所有內(nèi)容都會(huì)加到本地當(dāng)前目錄。
wget -r?http://place.your.url/here
這個(gè)命令會(huì)按照遞歸的方法,下載服務(wù)器上所有的目錄和文件,實(shí)質(zhì)就是下載整個(gè)網(wǎng)站。這個(gè)命令一定要小心使用,因?yàn)樵谙螺d的時(shí)候,被下載網(wǎng)站指向的所有地址同樣會(huì)被下載,因此,如果這個(gè)網(wǎng)站引用了其他網(wǎng)站,那么被引用的網(wǎng)站也會(huì)被下載下來!基于這個(gè)原因,這個(gè)參數(shù)不常用。可以用-l number參數(shù)來指定下載的層次。例如只下載兩層,那么使用-l 2。
要是您想制作鏡像站點(diǎn),那么可以使用-m參數(shù),例如:wget -m?http://place.your.url/here
這時(shí)wget會(huì)自動(dòng)判斷合適的參數(shù)來制作鏡像站點(diǎn)。此時(shí),wget會(huì)登錄到服務(wù)器上,讀入robots.txt并按robots.txt的規(guī)定來執(zhí)行。
2、斷點(diǎn)續(xù)傳。
當(dāng)文件特別大或者網(wǎng)絡(luò)特別慢的時(shí)候,往往一個(gè)文件還沒有下載完,連接就已經(jīng)被切斷,此時(shí)就需要斷點(diǎn)續(xù)傳。wget的斷點(diǎn)續(xù)傳是自動(dòng)的,只需要使用-c參數(shù),例如:
wget -c?http://the.url.of/incomplete/file
使用斷點(diǎn)續(xù)傳要求服務(wù)器支持?jǐn)帱c(diǎn)續(xù)傳。-t參數(shù)表示重試次數(shù),例如需要重試100次,那么就寫-t 100,如果設(shè)成-t 0,那么表示無窮次重試,直到連接成功。-T參數(shù)表示超時(shí)等待時(shí)間,例如-T 120,表示等待120秒連接不上就算超時(shí)。
3、批量下載。
如果有多個(gè)文件需要下載,那么可以生成一個(gè)文件,把每個(gè)文件的URL寫一行,例如生成文件download.txt,然后用命令:wget -i download.txt
這樣就會(huì)把download.txt里面列出的每個(gè)URL都下載下來。(如果列的是文件就下載文件,如果列的是網(wǎng)站,那么下載首頁(yè))
4、選擇性的下載。
可以指定讓wget只下載一類文件,或者不下載什么文件。例如:
wget -m --reject=gif?http://target.web.site/subdirectory
表示下載http://target.web.site/subdirectory,但是忽略gif文件。--accept=LIST 可以接受的文件類型,--reject=LIST拒絕接受的文件類型。
5、密碼和認(rèn)證。
wget只能處理利用用戶名/密碼方式限制訪問的網(wǎng)站,可以利用兩個(gè)參數(shù):
--http-user=USER設(shè)置HTTP用戶
--http-passwd=PASS設(shè)置HTTP密碼
對(duì)于需要證書做認(rèn)證的網(wǎng)站,就只能利用其他下載工具了,例如curl。
6、利用代理服務(wù)器進(jìn)行下載。
如果用戶的網(wǎng)絡(luò)需要經(jīng)過代理服務(wù)器,那么可以讓wget通過代理服務(wù)器進(jìn)行文件的下載。此時(shí)需要在當(dāng)前用戶的目錄下創(chuàng)建一個(gè).wgetrc文件。文件中可以設(shè)置代理服務(wù)器:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
分別表示http的代理服務(wù)器和ftp的代理服務(wù)器。如果代理服務(wù)器需要密碼則使用:
--proxy-user=USER設(shè)置代理用戶
--proxy-passwd=PASS設(shè)置代理密碼
這兩個(gè)參數(shù)。
使用參數(shù)--proxy=on/off 使用或者關(guān)閉代理。
wget還有很多有用的功能,需要用戶去挖掘。
wget的使用格式
Usage: wget [OPTION]... [URL]...
* 用wget做站點(diǎn)鏡像:
wget -r -p -np -k?http://dsec.pku.edu.cn/~usr_name/
# 或者
wget -m?http://dsec.pku.edu.cn/~usr_name/
* 在不穩(wěn)定的網(wǎng)絡(luò)上下載一個(gè)部分下載的文件,以及在空閑時(shí)段下載
wget -t 0 -w 31 -c?http://dsec.pku.edu.cn/BBC.avi?-o down.log &
# 或者從filelist讀入要下載的文件列表
wget -t 0 -w 31 -c -B?ftp://dsec.pku.edu.cn/linuxsoft?-i filelist.txt -o down.log &
上面的代碼還可以用來在網(wǎng)絡(luò)比較空閑的時(shí)段進(jìn)行下載。我的用法是:在mozilla中將不方便當(dāng)時(shí)下載的URL鏈接拷貝到內(nèi)存中然后粘貼到文件filelist.txt中,在晚上要出去系統(tǒng)前執(zhí)行上面代碼的第二條。
* 使用代理下載
wget -Y on -p -k?https://sourceforge.net/projects/wvware/
代理可以在環(huán)境變量或wgetrc文件中設(shè)定
# 在環(huán)境變量中設(shè)定代理
export PROXY=http://211.90.168.94:8080/
# 在~/.wgetrc中設(shè)定代理
http_proxy =?http://proxy.yoyodyne.com:18023/
ftp_proxy =?http://proxy.yoyodyne.com:18023/
wget各種選項(xiàng)分類列表
* 啟動(dòng)
-V,? --version?????????? 顯示wget的版本后退出
-h,? --help????????????? 打印語法幫助
-b,? --background??????? 啟動(dòng)后轉(zhuǎn)入后臺(tái)執(zhí)行
-e,? --execute=COMMAND?? 執(zhí)行`.wgetrc'格式的命令,wgetrc格式參見/etc/wgetrc或~/.wgetrc
* 記錄和輸入文件
-o,? --output-file=FILE???? 把記錄寫到FILE文件中
-a,? --append-output=FILE?? 把記錄追加到FILE文件中
-d,? --debug??????????????? 打印調(diào)試輸出
-q,? --quiet??????????????? 安靜模式(沒有輸出)
-v,? --verbose????????????? 冗長(zhǎng)模式(這是缺省設(shè)置)
-nv, --non-verbose????????? 關(guān)掉冗長(zhǎng)模式,但不是安靜模式
-i,? --input-file=FILE????? 下載在FILE文件中出現(xiàn)的URLs
-F,? --force-html?????????? 把輸入文件當(dāng)作HTML格式文件對(duì)待
-B,? --base=URL???????????? 將URL作為在-F -i參數(shù)指定的文件中出現(xiàn)的相對(duì)鏈接的前綴
--sslcertfile=FILE???? 可選客戶端證書
--sslcertkey=KEYFILE?? 可選客戶端證書的KEYFILE
--egd-file=FILE??????? 指定EGD socket的文件名
* 下載
--bind-address=ADDRESS?? 指定本地使用地址(主機(jī)名或IP,當(dāng)本地有多個(gè)IP或名字時(shí)使用)
-t,? --tries=NUMBER?????????? 設(shè)定最大嘗試鏈接次數(shù)(0 表示無限制).
-O?? --output-document=FILE?? 把文檔寫到FILE文件中
-nc, --no-clobber???????????? 不要覆蓋存在的文件或使用.#前綴
-c,? --continue?????????????? 接著下載沒下載完的文件
--progress=TYPE????????? 設(shè)定進(jìn)程條標(biāo)記
-N,? --timestamping?????????? 不要重新下載文件除非比本地文件新
-S,? --server-response??????? 打印服務(wù)器的回應(yīng)
--spider???????????????? 不下載任何東西
-T,? --timeout=SECONDS??????? 設(shè)定響應(yīng)超時(shí)的秒數(shù)
-w,? --wait=SECONDS?????????? 兩次嘗試之間間隔SECONDS秒
--waitretry=SECONDS????? 在重新鏈接之間等待1...SECONDS秒
--random-wait??????????? 在下載之間等待0...2*WAIT秒
-Y,? --proxy=on/off?????????? 打開或關(guān)閉代理
-Q,? --quota=NUMBER?????????? 設(shè)置下載的容量限制
--limit-rate=RATE??????? 限定下載輸率
* 目錄
-nd? --no-directories??????????? 不創(chuàng)建目錄
-x,? --force-directories???????? 強(qiáng)制創(chuàng)建目錄
-nH, --no-host-directories?????? 不創(chuàng)建主機(jī)目錄
-P,? --directory-prefix=PREFIX?? 將文件保存到目錄 PREFIX/...
--cut-dirs=NUMBER?????????? 忽略 NUMBER層遠(yuǎn)程目錄
* HTTP 選項(xiàng)
--http-user=USER????? 設(shè)定HTTP用戶名為 USER.
--http-passwd=PASS??? 設(shè)定http密碼為 PASS.
-C,? --cache=on/off??????? 允許/不允許服務(wù)器端的數(shù)據(jù)緩存 (一般情況下允許).
-E,? --html-extension????? 將所有text/html文檔以.html擴(kuò)展名保存
--ignore-length?????? 忽略 `Content-Length'頭域
--header=STRING?????? 在headers中插入字符串 STRING
--proxy-user=USER???? 設(shè)定代理的用戶名為 USER
--proxy-passwd=PASS?? 設(shè)定代理的密碼為 PASS
--referer=URL???????? 在HTTP請(qǐng)求中包含 `Referer: URL'頭
-s,? --save-headers??????? 保存HTTP頭到文件
-U,? --user-agent=AGENT??? 設(shè)定代理的名稱為 AGENT而不是 Wget/VERSION.
--no-http-keep-alive? 關(guān)閉 HTTP活動(dòng)鏈接 (永遠(yuǎn)鏈接).
--cookies=off???????? 不使用 cookies.
--load-cookies=FILE?? 在開始會(huì)話前從文件 FILE中加載cookie
--save-cookies=FILE?? 在會(huì)話結(jié)束后將 cookies保存到 FILE文件中
* FTP 選項(xiàng)
-nr, --dont-remove-listing?? 不移走 `.listing'文件
-g,? --glob=on/off?????????? 打開或關(guān)閉文件名的 globbing機(jī)制
--passive-ftp?????????? 使用被動(dòng)傳輸模式 (缺省值).
--active-ftp??????????? 使用主動(dòng)傳輸模式
--retr-symlinks???????? 在遞歸的時(shí)候,將鏈接指向文件(而不是目錄)
* 遞歸下載
-r,? --recursive????????? 遞歸下載--慎用!
-l,? --level=NUMBER?????? 最大遞歸深度 (inf 或 0 代表無窮).
--delete-after?????? 在現(xiàn)在完畢后局部刪除文件
-k,? --convert-links????? 轉(zhuǎn)換非相對(duì)鏈接為相對(duì)鏈接
-K,? --backup-converted?? 在轉(zhuǎn)換文件X之前,將之備份為 X.orig
-m,? --mirror???????????? 等價(jià)于 -r -N -l inf -nr.
-p,? --page-requisites??? 下載顯示HTML文件的所有圖片
* 遞歸下載中的包含和不包含(accept/reject)
-A,? --accept=LIST??????????????? 分號(hào)分隔的被接受擴(kuò)展名的列表
-R,? --reject=LIST??????????????? 分號(hào)分隔的不被接受的擴(kuò)展名的列表
-D,? --domains=LIST?????????????? 分號(hào)分隔的被接受域的列表
--exclude-domains=LIST?????? 分號(hào)分隔的不被接受的域的列表
--follow-ftp???????????????? 跟蹤HTML文檔中的FTP鏈接
--follow-tags=LIST?????????? 分號(hào)分隔的被跟蹤的HTML標(biāo)簽的列表
-G,? --ignore-tags=LIST?????????? 分號(hào)分隔的被忽略的HTML標(biāo)簽的列表
-H,? --span-hosts???????????????? 當(dāng)遞歸時(shí)轉(zhuǎn)到外部主機(jī)
-L,? --relative?????????????????? 僅僅跟蹤相對(duì)鏈接
-I,? --include-directories=LIST?? 允許目錄的列表
-X,? --exclude-directories=LIST?? 不被包含目錄的列表
-np, --no-parent????????????????? 不要追溯到父目錄
問題
在遞歸下載的時(shí)候,遇到目錄中有中文的時(shí)候,wget創(chuàng)建的本地目錄名會(huì)用URL編碼規(guī)則處理。如"天網(wǎng)防火墻"會(huì)被存為"%CC%EC%CD%F8%B7%C0%BB%F0%C7%BD",這造成閱讀上的
總結(jié)
以上是生活随笔為你收集整理的python wget_python wget下载文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【高等数学】 目录
- 下一篇: python wget_python w