Скачивание основного файла по HTTP и сохранение на диск в Python?

Я'м новичок в Python и я'вэ шел через Q&a на этой странице, для ответа на мой вопрос. Однако, я'м Новичок и мне трудно понять некоторые решения. Мне нужно очень простое решение.

Кто-нибудь может объяснить простое решение 'скачиваете файл через HTTP' и 'сохранив его на диск, в Windows', ко мне?

Я'м не уверен, как использовать shutil и модулей операционной системы, либо.

Файл я хочу скачать до 500 МБ и является .архиве файл GZ.Если кто-то может объяснить, как распаковать архив и использовать файлы в ней тоже, это было бы здорово!

Здесь'с частичным решением, что я написал из различных ответов в сочетании:

import requests
import os
import shutil

global dump

def download_file():
    global dump
    url = "http://randomsite.com/file.gz"
    file = requests.get(url, stream=True)
    dump = file.raw

def save_file():
    global dump
    location = os.path.abspath("D:\folder\file.gz")
    with open("file.gz", 'wb') as location:
        shutil.copyfileobj(dump, location)
    del dump

Может кто-то указать на ошибки (начальный уровень) и объяснить любые простые методы для этого?

Спасибо!

Решение

Чисто для того, чтобы скачать файл:

import urllib

testfile = urllib.URLopener()
testfile.retrieve("http://randomsite.com/file.gz", "file.gz")

Загрузить файл с веб-сайта, и называет его file.gz. Это одно из моих любимых решений, от https://stackoverflow.com/questions/3042757/downloading-a-picture-via-urllib-and-python.

Этот пример использует urllib библиотека, и он будет напрямую получать виде файла источник.

Комментарии (8)

Как сказано здесь:

import urllib
urllib.urlretrieve ("http://randomsite.com/file.gz", "file.gz")

Редактировать: если вы все еще хотите использовать запросы, взгляните на этот вопрос или этот.

Комментарии (6)

Я использую девятое.

Простая и хорошая библиотека, Если вы хотите пример?

import wget

file_url = 'http://johndoe.com/download.zip'

file_name = wget.download(file_url)

поддержка модуль wget для Python 2 и Python 3 версии

Комментарии (0)

Четыре метода, с помощью wget, urllib и запрос.

#!/usr/bin/python
import requests
from StringIO import StringIO
from PIL import Image
import profile as profile
import urllib
import wget

url = 'https://tinypng.com/images/social/website.jpg'

def testRequest():
    image_name = 'test1.jpg'
    r = requests.get(url, stream=True)
    with open(image_name, 'wb') as f:
        for chunk in r.iter_content():
            f.write(chunk)

def testRequest2():
    image_name = 'test2.jpg'
    r = requests.get(url)
    i = Image.open(StringIO(r.content))
    i.save(image_name)

def testUrllib():
    image_name = 'test3.jpg'
    testfile = urllib.URLopener()
    testfile.retrieve(url, image_name)

def testwget():
    image_name = 'test4.jpg'
    wget.download(url, image_name)

if __name__ == '__main__':
    profile.run('testRequest()')
    profile.run('testRequest2()')
    profile.run('testUrllib()')
    profile.run('testwget()')

testRequest - функция 4469882 звонки (4469842 примитивных вызовов) в 20.236 секунд

testRequest2 - функция 8580 звонки (8574 примитивных вызовов) в 0.072 секунд

testUrllib - 3810 вызовы функций (3775 примитивных вызовов) в 0.036 секунд

testwget - функция 3489 звонки в 0.020 секунд

Комментарии (2)

Для Питон3+ URLopener является устаревшим. И при использовании вы получите ошибку, как показано ниже:

url_opener = urllib.URLopener() AttributeError: модуль 'urllib' не имеет атрибут 'URLopener'

Итак, попробуем:

import urllib.request 
urllib.request.urlretrieve(url, filename)
Комментарии (0)

Экзотические Решения Windows

import subprocess

subprocess.run("powershell Invoke-WebRequest {} -OutFile {}".format(your_url, filename), shell=True)
Комментарии (0)

Я начал спускаться по этому пути, потому что в ESXi'ы wget-это не скомпилирован с поддержкой SSL и я хотел скачать ОВА от поставщика'ы прямо на хост ESXi, который находится на другой стороне мира.

Мне пришлось отключить брандмауэр(ленивый)/включить https путем редактирования правил(Правильное)

создал скрипт на Python:

import ssl
import shutil
import tempfile
import urllib.request
context = ssl._create_unverified_context()

dlurl='https://somesite/path/whatever'
with urllib.request.urlopen(durl, context=context) as response:
    with open("file.ova", 'wb') as tmp_file:
        shutil.copyfileobj(response, tmp_file)

Библиотеки в ESXi вроде в паре, но с открытым исходным кодом установщика ласка, казалось, использовать urllib для HTTPS... так что это вдохновило меня пойти по этому пути

Комментарии (0)

Другой путь для сохранения файла это:

import csv
import urllib

urllib.retrieve("your url goes here" , "output.csv")
Комментарии (2)