Как мне загрузить файл через HTTP, используя Python?

Я знаю, что этот вопрос уже имеет выбранный ответ, но я нашел в этой статье , что, очевидно, показывает, что интерполяция строк работает быстрее, чем конкатенация. Это может быть полезно для тех, кто все еще сомневается.

793
задан kilojoules 31 March 2017 в 05:11
поделиться

4 ответа

В Python 2 используйте urllib2, который идет со стандартной библиотекой.

import urllib2
response = urllib2.urlopen('http://www.example.com/')
html = response.read()

Это - самый основной способ пользоваться библиотекой минус любая обработка ошибок. Можно также сделать более сложный материал, такой как изменяющиеся заголовки. Документация может быть найдена здесь.

431
ответ дан Deep LF 31 March 2017 в 05:11
поделиться
import urllib2
mp3file = urllib2.urlopen("http://www.example.com/songs/mp3.mp3")
with open('test.mp3','wb') as output:
  output.write(mp3file.read())

wb в open('test.mp3','wb') открывает файл (и стирает любой существующий файл) в режиме двоичного счета, таким образом, можно сохранить данные с ним вместо просто текста.

156
ответ дан Matthew Strawbridge 31 March 2017 в 05:11
поделиться

Еще один, с помощью urlretrieve :

import urllib
urllib.urlretrieve ("http://www.example.com/songs/mp3.mp3", "mp3.mp3")

(для Python 3 + использование import urllib.request и urllib.request.urlretrieve)

еще одно, с "progressbar"

import urllib2

url = "http://download.thinkbroadband.com/10MB.zip"

file_name = url.split('/')[-1]
u = urllib2.urlopen(url)
f = open(file_name, 'wb')
meta = u.info()
file_size = int(meta.getheaders("Content-Length")[0])
print "Downloading: %s Bytes: %s" % (file_name, file_size)

file_size_dl = 0
block_sz = 8192
while True:
    buffer = u.read(block_sz)
    if not buffer:
        break

    file_size_dl += len(buffer)
    f.write(buffer)
    status = r"%10d  [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
    status = status + chr(8)*(len(status)+1)
    print status,

f.close()
1043
ответ дан Richard Dunn 31 March 2017 в 05:11
поделиться

Я соглашаюсь с Corey, urllib2 - больше завершенное, чем urllib и должен, вероятно, быть модулем, используемым, если Вы хотите сделать более сложные вещи, но сделать ответы больше завершенный, urllib является более простым модулем, если Вы хотите просто основы:

import urllib
response = urllib.urlopen('http://www.example.com/sound.mp3')
mp3 = response.read()

будет хорошо работать. Или, если Вы не хотите иметь дело с объектом "ответа", что можно звонить чтение () непосредственно:

import urllib
mp3 = urllib.urlopen('http://www.example.com/sound.mp3').read()
14
ответ дан akdom 31 March 2017 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: