28

私は現在、URLからファイルをダウンロードするスクリプトを書いています

import urllib.request
urllib.request.urlretrieve(my_url, 'my_filename')

ドキュメントのurllib.request.urlretrieve状態:

次の関数とクラスは、Python 2モジュールurllibから移植されています(urllib2ではありません)。それらは将来のある時点で非推奨になる可能性があります。

したがって、私はそれを避けたいので、近い将来このコードを書き直す必要はありません。

download(url, filename)標準ライブラリのような別のインターフェイスが見つかりません。urlretrievePython 3でレガシーインターフェイスと見なされる場合、代替品は何ですか?

4

4 に答える 4

26

非推奨は1つのことであり、将来のある時点で非推奨になる可能性があることは別のことです。

それがあなたのニーズに合うなら、私は使い続けurlretrieveます。

そうは言っても、それなしで行うことができます:

from urllib.request import urlopen
from shutil import copyfileobj

with urlopen(my_url) as in_stream, open('my_filename', 'wb') as out_file:
    copyfileobj(in_stream, out_file)
于 2013-02-23T00:22:12.080 に答える
25

リクエストはこれには本当にいいです。それをインストールするためにいくつかの依存関係があります。これが例です。

import requests
r = requests.get('imgurl')
with open('pic.jpg','wb') as f:
  f.write(r.content)
于 2013-02-22T23:51:05.090 に答える
1

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

import urllib.request

image_url = "https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png"
response = urllib.request.urlopen(image_url)
image = response.read()

with open("image.png", "wb") as file:
    file.write(image)
于 2018-01-28T04:41:20.357 に答える
0

これがあなたが探しているものなのか、それとも「より良い」方法があるのか​​はわかりませんが、スクリプトをPython 2/3と互換性を持たせるために、ライブラリの後にスクリプトの先頭に追加したものです。

# Python version compatibility
if version.major == 3:
    from urllib.error import HTTPError
    from urllib.request import urlopen, urlretrieve

elif version.major == 2:
    from urllib2 import HTTPError, urlopen

    def urlretrieve(url, data):
        url_data = urlopen(url)
        with open(data, "wb") as local_file:
            local_file.write(url_data.read())
else:
    raise ValueError('No valid Python interpreter found.')

少なくとも便利なトリックのように思えますが、これが誰かに役立つことを願っています。

一番!

于 2021-08-21T04:42:21.973 に答える