Podstawowe pobieranie i zapisywanie plików http na dysk w Pythonie?
Jestem nowy w Pythonie i przeglądałem pytania i odpowiedzi na moje pytanie na tej stronie. Jednak jestem początkujący i trudno mi zrozumieć niektóre z rozwiązań. Potrzebuję bardzo podstawowego rozwiązania.
Czy mógłby mi ktoś wyjaśnić proste rozwiązanie "Pobieranie pliku przez http" i "zapisywanie go na dysk, w Windows"?
Nie jestem pewien, jak korzystać z modułów shutil i os, albo.
Plik, który chcę pobrać ma poniżej 500 MB i jestgz archiwum.Jeśli ktoś może wyjaśnić, jak rozpakować archiwum i wykorzystać znajdujące się w nim pliki, to byłoby świetnie!
Oto częściowe rozwiązanie, które napisałem z różnych odpowiedzi połączonych:
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
Czy ktoś mógłby wskazać błędy (poziom początkujący) i wyjaśnić jakieś łatwiejsze metody na to?
Dzięki!7 answers
Czystym sposobem na pobranie pliku jest:
import urllib
testfile = urllib.URLopener()
testfile.retrieve("http://randomsite.com/file.gz", "file.gz")
To pobiera plik ze strony internetowej i nazywa go file.gz
. Jest to jedno z moich ulubionych rozwiązań, od pobierania obrazu przez urllib i python .
Ten przykład wykorzystuje bibliotekę urllib
i bezpośrednio pobiera plik ze źródła.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:32
Jak wspomniano TUTAJ :
import urllib
urllib.urlretrieve ("http://randomsite.com/file.gz", "file.gz")
EDIT:
jeśli nadal chcesz korzystać z zapytań, spójrz na to pytanie lub to pytanie .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:48
Używam wget .
Prosta i dobra biblioteka, jeśli chcesz przykład?
import wget
file_url = 'http://johndoe.com/download.zip'
file_name = wget.download(file_url)
Moduł Wget obsługuje wersje python 2 i python 3
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-13 21:38:41
Cztery metody wykorzystujące wget, urllib I request.
#!/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 wywołania funkcji (4469842) w 20.236 sekund
TestRequest2 - 8580 wywołania funkcji (8574) w 0.072 sekund
TestUrllib - 3810 wywołań funkcji (3775) w 0.036 sekund
Testwget-3489 wywołanie funkcji w 0.020 sekund
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-24 11:21:38
Exotic Windows Solution
import subprocess
subprocess.run("powershell Invoke-WebRequest {} -OutFile {}".format(your_url, filename), shell=True)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-22 00:50:39
Zacząłem tę ścieżkę, ponieważ ESXi wget nie jest skompilowany z SSL i chciałem pobrać OVA ze strony dostawcy bezpośrednio na host ESXi, który jest po drugiej stronie świata.
Musiałem wyłączyć firewall(lazy) / włączyć https poprzez edycję reguł (proper)
Utworzono skrypt Pythona:
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)
Biblioteki ESXi są trochę sparowane, ale instalator open source Weasel wydawał się używać urllib dla https... więc to zainspirowało mnie do tego ścieżka
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-08 15:17:57
Innym czystym sposobem zapisania pliku jest:
import csv
import urllib
urllib.retrieve("your url goes here" , "output.csv")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-25 15:30:34