2013-02-22 25 views
15

私は現在、イメージURLを取得し、それをあらかじめ指定されたファイルにダウンロードするスクリプトを作成しています。urllib.request.urlretrieveの代わりに使用するコマンドは何ですか?

は、ここに私のコードの関連する部分である:

import urllib.request 

urllib.request.urlretrieve(image['url'],p) 

それは 'URL' を受け取り、 'P' として保存します。

urllib.request.urlretrieveはレガシーインターフェイスであり、将来的には廃止される可能性があるため、可能な限り避けたいので、すぐに書き直す必要はありません。

私はcommand(url,filename)を行うことができますが、まだ運がなかった別のコマンドを見つけることを試みています。

あなたは私が代わりに使用すべきコマンドに関するいくつかの良いアドバイスをしていますか?

ああ、可能であれば外部ライブラリの使用を避けたいと思います。

答えて

17

非推奨が将来にいくつかの時点で非推奨になるかもしれないが、一つのことである別のです。

あなたのニーズに合っていれば、私はurlretrieveを続けていきます。

from urllib.request import urlopen 
from shutil import copyfileobj 

with urlopen(image['url']) as in_stream, open(p, 'wb') as out_file: 
    copyfileobj(in_stream, out_file) 
+1

ありがとうございました。シャットル図書館が存在しているかどうか分からなかった。 – Marc2540

+0

うわー、これはきれいに働いた。私は同じことを探していましたが、オーディオの小さな部分については、それをファイルに保存する方法を見つけることができませんでした。しばらくの間、 'urlretrieve'を見つけられませんでした。私は' urlopen'が私にバイトを与えることに気付きませんでした。私はファイルを保存できるメソッドを探すべきだと思っていました。ビットを保存します。私はこれがプログラミングの標準的な練習だと思うので意味があるはずですが、I/Oでこれまでに作業したことはありません。ありがとう、それは私が恐れていたよりも簡単です。 –

+0

copyfileobjありがとう! 'urlretrieve 'の問題は、サーバの障害(502/404 /何か)を判断する方法がないことです。 – y0prst

2

お客様urllib2を使用してください。あなたはおそらく

+0

タグではなく私の投稿の本文でこれを言及しているはずですが、urllib2がurllibにマージされたpython 3.3を使用しています。 – Marc2540

10

要求を使用する苦痛を超えているrequests

urllibレガシー

urllib2で使用する必要があり、このためには本当にいいです。しかし、それをインストールするにはいくつかの依存関係があります。ここに例があります。

import requests 
r = requests.get('imgurl') 
with open('pic.jpg','wb') as f: 
    f.write(r.content) 
0

私は、これはxmlファイルでも働いたことを追加したい:あなたはそれなしで行うことができます、と述べた

0

shutilを使用せず、requestsのような他の外部ライブラリを使用しない別のソリューションです。

import urllib.request 

image = {'url': 'https://cdn.sstatic.net/Sites/stackoverflow/img/appletouch-icon.png'} 
p = 'image.png' 

response = urllib.request.urlopen(image['url']) 
image = response.read() 

file = open(p, 'wb') 

file.write(image) 
file.close() 
+0

こんにちは、ようこそ。コードのみの回答は一般的にあまり役に立たないと考えられます。コンテキストを追加して解決策を説明するために、あなたの答えを編集してください。 –

関連する問題