2012-03-27 8 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

私は理解しません。ヘッダーをカスタマイズしたい場合は、2番目の方法で何が問題になりますか?それは動作しませんか? – jdi

+0

それは動作しますが、私はurllib.request.urlretrieveが次に使用されていることを確信していますか?また、各反復で応答オブジェクトを作成する必要があります(ループに入れる場合に備えて)。コードもかなり長くなっていますので、urlretrieveを使用してヘッダを設定する方法が必要だと思いました。結局、urlretrieveは多くの行を保存します。 – s5s

+0

'urlretrieve'はドキュメントが言っているとおりです:ネットワークリソースをローカルファイルに単純にコピーするために使用される上位レベルの関数です。ヘッダーのように多くの制御を得ることはできません。そのため、要求オブジェクトにドロップダウンする必要があります。あなたは 'urlretrieve'の手作業をしているので、もう少し行が必要です。 – jdi

答えて

2

ローカルファイル。

urlretrieveは高度な機能であるため、ドキュメントの内容を正確に伝えるだけです。ネットワークリソースをローカルファイルにダウンロードし、ファイルの場所を教えてください。 2番目の例のやや低いレベルのアプローチが気に入らず、さらに高度な機能が必要な場合は、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 

それが簡単にはできません。

関連する問題