Как мне загрузить файл через HTTP, используя Python? - PullRequest
775 голосов
/ 22 августа 2008

У меня есть небольшая утилита, которую я использую для загрузки MP3 с веб-сайта по расписанию, а затем для создания / обновления XML-файла подкаста, который я, очевидно, добавил в iTunes.

Обработка текста, который создает / обновляет файл XML, написана на Python. Однако я использую wget внутри файла Windows .bat, чтобы загрузить настоящий MP3. Я бы предпочел, чтобы вся утилита была написана на Python.

Я изо всех сил пытался найти способ фактически загрузить файл в Python, поэтому я прибег к wget.

Итак, как мне загрузить файл с помощью Python?

Ответы [ 22 ]

1 голос
/ 14 октября 2013

Это может быть немного поздно, но я видел код pabloG и не мог не добавить os.system ('cls'), чтобы он выглядел УДИВИТЕЛЬНО! Проверьте это:

    import urllib2,os

    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)
    os.system('cls')
    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()

Если вы работаете в среде, отличной от Windows, вам придется использовать что-то отличное от 'cls'. В MAC OS X и Linux это должно быть «ясно».

1 голос
/ 13 марта 2017

urlretrieve и reports.get просты, но реальность - нет. Я получил данные для пары сайтов, включая текст и изображения, два из которых, вероятно, решают большинство задач. но для более универсального решения я предлагаю использовать урлопен. Поскольку он включен в стандартную библиотеку Python 3, ваш код может работать на любом компьютере, на котором установлен Python 3, без предварительной установки site-package

import urllib.request
url_request = urllib.request.Request(url, headers=headers)
url_connect = urllib.request.urlopen(url_request)

#remember to open file in bytes mode
with open(filename, 'wb') as f:
    while True:
        buffer = url_connect.read(buffer_size)
        if not buffer: break

        #an integer value of size of written data
        data_wrote = f.write(buffer)

#you could probably use with-open-as manner
url_connect.close()

Этот ответ обеспечивает решение HTTP 403 Запрещено при загрузке файла через http с использованием Python. Я пробовал только запросы и модули urllib, другой модуль может обеспечить что-то лучшее, но именно этот я использовал для решения большинства проблем.

...