Как загрузить файл с помощью urllib.запрос в Python 3?

Итак, я путаюсь с urllib.request в Python 3 и мне интересно, как написать в результате попадания файла в файл на локальной машине. Я попробовал:

g = urllib.request.urlopen('http://media-mcw.cursecdn.com/3/3f/Beta.png')
with open('test.png', 'b+w') as f:
    f.write(g)

но я получил эту ошибку:

TypeError: 'HTTPResponse' does not support the buffer interface

что я делаю не так?

примечание: Я видел этот вопрос, но это связано с Python 2 в urllib2, который был переработан в Python 3.

2 ответов


изменить

f.write(g)

to

f.write(g.read())

более простой способ, я думаю (также вы можете сделать это в двух строках), это использовать:

import urllib.request
urllib.request.urlretrieve('http://media-mcw.cursecdn.com/3/3f/Beta.png', 'test.png')

Что касается метода, который вы использовали. Когда вы используете g = urllib.request.urlopen('http://media-mcw.cursecdn.com/3/3f/Beta.png') вы просто получаете файл. Вы должны использовать g.read(), g.readlines() или g.readline() читать это.

это так же, как чтение обычного файла (за исключением синтаксиса), и может рассматриваться очень похожим образом.