De bază http file descărcarea și salvarea pe disc în python?

Am'm noi de la Python și am'am fost de gând prin Q&O de pe acest site, pentru un răspuns la întrebarea mea. Cu toate acestea, am'm un incepator si mi-e greu să înțeleagă unele dintre soluții. Am nevoie de o soluție de bază.

Ar putea cineva vă rugăm să explicați o soluție simplă pentru a 'Descărcarea unui fișier prin http' si 'Salvarea pe disc, în Windows', pentru mine?

Am'm nu sunt sigur cum să folosiți shutil și sistemul de operare pe module, fie.

Fișierul pe care îl doriți să descărcați este sub 500 de MB și este un .gz fișier arhivă.Daca cineva poate explica cum de a extrage arhiva și de a utiliza fișierele în ea, de asemenea, ar fi grozav!

Aici's o soluție parțială, pe care am scris-o din diverse răspunsuri combinate:

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

Ar putea cineva să-mi arate erori (nivel începător) și a explica orice mai ușor metode pentru a face acest lucru?

Multumesc!!!

Soluția

Un mod curat de a descărca un fișier este:

import urllib

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

Acest descarcă un fișier de pe un site web și nume este file.gz`. Aceasta este una dintre mele preferate de soluții, de la https://stackoverflow.com/questions/3042757/downloading-a-picture-via-urllib-and-python.

Acest exemplu folosește urllib` biblioteca, iar aceasta va va prelua direct fișierul constituie o sursă.

Comentarii (8)

După cum sa menționat aici:

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

EDITARE:` Dacă totuși doriți să utilizați cereri, să ia o privire la această întrebare]2 sau aceasta.

Comentarii (6)

Eu folosesc wget.

Simplu si bun, bibliotecă, dacă doriți să-exemplu?

import wget

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

file_name = wget.download(file_url)

wget suport modul python 2 și python 3 versiuni

Comentarii (0)

Patru metode folosind wget, urllib și cerere.

#!/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 apeluri de funcții (4469842 primitive apeluri) în 20.236 secunde

testRequest2 - 8580 apeluri de funcții (8574 primitive apeluri) în 0.072 secunde

testUrllib - 3810 apeluri de funcții (3775 primitive apeluri) în 0.036 secunde

testwget - 3489 apeluri de funcții în 0.020 secunde

Comentarii (2)

Pentru Python3+ URLopener este învechită. Și atunci când sunt utilizate vei primi eroare de mai jos:

url_opener = urllib.URLopener() AttributeError: modul 'urllib' nu are atribut 'URLopener'

Deci, încercați:

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

Exotice Windows Soluție

import subprocess

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

Am pornit pe această cale, pentru că ESXi's wget nu este compilat cu SSL și am vrut pentru a descărca un OVA de la un furnizor's site-ul direct pe gazdă ESXi care se află pe cealaltă parte a lumii.

Am avut pentru a dezactiva firewall-ul(leneș)/activa https afară de editarea regulilor(buna)

creat 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 bibliotecile sunt un fel de asociat în jos, dar open source nevăstuică instalare părea să utilizați urllib pentru https... așa că m-a inspirat să meargă pe acest drum

Comentarii (0)

O altă modalitate de a salva fișierul este aceasta:

import csv
import urllib

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