Dasar http untuk men-download dan menyimpan file ke disk dalam python?

I'm baru untuk Python dan I've telah melalui Q&A di situs ini, untuk jawaban atas pertanyaan saya. Namun, saya'm pemula dan aku menemukan itu sulit untuk memahami beberapa solusi. Saya perlu sangat dasar solusi.

Bisa seseorang tolong jelaskan solusi sederhana untuk 'men-Download file melalui http' dan 'menyimpannya ke disk dalam Windows', untuk saya?

I'm tidak yakin bagaimana menggunakan shutil dan os modul, baik.

File saya ingin men-download di bawah 500 MB dan merupakan .gz file arsip.Jika seseorang dapat menjelaskan bagaimana untuk mengekstrak arsip dan memanfaatkan file-file di dalamnya juga, yang akan menjadi besar!

Berikut ini's solusi parsial, yang saya tulis dari berbagai jawaban yang dikombinasikan:

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

Seseorang bisa menunjukkan kesalahan (tingkat pemula) dan menjelaskan setiap metode yang lebih mudah untuk melakukan hal ini?

Terima kasih!!!

Larutan

Cara yang bersih untuk men-download file ini:

import urllib

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

Ini mendownload file dari sebuah situs web dan nama-nama itu file.gz. Ini adalah salah satu favorit saya solusi, dari https://stackoverflow.com/questions/3042757/downloading-a-picture-via-urllib-and-python.

Contoh ini menggunakan urllib perpustakaan, dan itu akan langsung mengambil berkas formulir sumber.

Komentar (8)

Seperti yang disebutkan di sini:

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

EDIT: Jika anda masih ingin menggunakan permintaan, lihatlah pertanyaan atau ini.

Komentar (6)

Saya menggunakan wget.

Sederhana dan perpustakaan yang baik jika anda ingin contoh?

import wget

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

file_name = wget.download(file_url)

wget dukungan modul python 2 dan python versi 3

Komentar (0)

Empat metode menggunakan wget, urllib dan permintaan.

#!/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 fungsi panggilan (4469842 primitif panggilan) di 20.236 detik

testRequest2 - 8580 fungsi panggilan (8574 primitif panggilan) di 0.072 detik

testUrllib - 3810 fungsi panggilan (3775 primitif panggilan) di 0.036 detik

testwget - 3489 fungsi panggilan di 0.020 detik

Komentar (2)

Untuk Python3+ URLopener sudah ditinggalkan. Dan ketika digunakan, anda akan mendapatkan error seperti di bawah ini:

url_opener = urllib.URLopener() AttributeError: modul 'urllib' tidak memiliki atribut 'URLopener'

Jadi, cobalah:

import urllib.request 
urllib.request.urlretrieve(url, filename)
Komentar (0)

Eksotis Windows Solusi

import subprocess

subprocess.run("powershell Invoke-WebRequest {} -OutFile {}".format(your_url, filename), shell=True)
Komentar (0)

Aku mulai menyusuri jalan ini karena ESXi's wget tidak dikompilasi dengan SSL dan saya ingin men-download OVA dari vendor's web langsung ke host ESXi yang berada di sisi lain dari dunia.

Aku harus menonaktifkan firewall(malas)/mengaktifkan https keluar dengan mengedit aturan(yang tepat)

membuat script 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 perpustakaan adalah jenis dipasangkan ke open source musang installer tampak menggunakan urllib untuk https... jadi terinspirasi saya untuk pergi ke jalan ini

Komentar (0)

Lain cara yang bersih untuk menyimpan file ini:

import csv
import urllib

urllib.retrieve("your url goes here" , "output.csv")
Komentar (2)