2012-03-27 80 views
1

我不確定如何做到這一點。一種方法是:Python下載文件

import urllib.request; 
urllib.request.urlretrieve('www.example.com/file.tar', 'file.tar') 

另一種方法是:

import urllib.request; 

#Set as appropriate 
userAgent = ....; 

req = urllib.request.Request('www.example.com/file.tar', headers={'User-Agent' : userAgent}); 
response = urllib.request.urlopen(req); 

#Save the file 
f = open('file.tar', 'wb'); 
f.write(response.read()); 
f.close() 

我不知道使用哪種方法。我將在循環中下載許多文件(使用模式文件名)。不過,我希望能夠設置一個用戶代理標題。這並不重要,但我想。

編輯:我忘了提及,我更喜歡第一種方法,但我不知道如何設置urlretrieve用戶代理標題。

+0

我不明白。如果您想自定義標題,您的第二種方法有什麼問題?它不起作用嗎? – jdi 2012-03-27 23:16:37

+0

它的工作原理,但我不確定什麼urllib.request.urlretrieve用於呢?另外我需要在每次迭代時創建一個響應對象(以防將其放入循環中)。代碼也很長,所以我認爲必須有一種方法來使用urlretrieve並設置標題。畢竟urlretrieve保存了很多行。 – s5s 2012-03-27 23:19:55

+0

'urlretrieve'正是文檔所說的:一個更高級別的函數,僅用於將網絡資源複製到本地文件。你不會得到很多控制,比如標題,這就是爲什麼你必須下拉到一個請求對象。您正在執行'urlretrieve'的手動過程,因此它需要更多行。 – jdi 2012-03-27 23:22:45

回答

2

我而動什麼開始作爲註釋,一個答案......

你的第二個例子,幾乎做什麼,它需要在提出請求的對象與自定義標題,然後讀取結果成本地文件。

urlretrieve是一個更高級別的功能,因此它只能完成文檔所說的內容:將網絡資源下載到本地文件並告訴您文件位於何處。如果你不喜歡你的第二個例子的稍低級別的方法和你想要更多的高級功能,您可以考慮使用Requests

0

正如@jdi說,你可以使用requests庫。這也在https://docs.python.org/2/library/urllib2.html上提及。您需要點擊圖書館,例如

pip install requests 

我的代碼如下所示:

import requests 

def download_file(url): 
    file = requests.get(url) 
    return file.text 

它可以不容易。