私はPythonに慣れていないので、このサイトでQ&Aを行っています。私の質問に対する答えです。しかし、私は初心者で、いくつかの解決策を理解するのは難しいと思います。非常に基本的な解決策が必要です。
「httpでファイルをダウンロードする」と「Windowsでディスクに保存する」という簡単な解決策を教えてください。
Shutilとosモジュールの使い方もわかりません。
私がダウンロードしたいファイルは500 MB以下で、.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")
これはWebサイトからファイルをダウンロードし、それをfile.gz
と命名します。これは、 urllibとpython 経由で写真をダウンロードすることからの、私のお気に入りの解決策の1つです。
この例ではurllib
ライブラリを使用しており、ソースからファイルを直接取得します。
私は wget を使います。
あなたが例証したいなら、シンプルで良い図書館?
import wget
file_url = 'http://johndoe.com/download.Zip'
file_name = wget.download(file_url)
wgetモジュールはpython 2とpython 3のバージョンをサポート
Wget、urllib、およびrequestを使用する4つの方法.
#!/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 __== '__main__':
profile.run('testRequest()')
profile.run('testRequest2()')
profile.run('testUrllib()')
profile.run('testwget()')
testRequest - 20.236秒で4469882の関数呼び出し(4469842のプリミティブ呼び出し)
testRequest2 - 0.072秒で8580の関数呼び出し(8574の基本呼び出し)
testUrllib - 0.036秒で3810の関数呼び出し(3775のプリミティブ呼び出し)
testwget - 0.020秒で3489の関数呼び出し
エキゾチックなWindowsソリューション
import subprocess
subprocess.run("powershell Invoke-WebRequest {} -OutFile {}".format(your_url, filename), Shell=True)
Python3 +の場合URLopener
は推奨されません。そして使用すると以下のようにエラーになります。
url_opener = urllib.URLopener()AttributeError:モジュール 'urllib'には属性 'URLopener'がありません
だから、試してみてください。
import urllib.request
urllib.request.urlretrieve(url, filename)
ESXiのwgetはSSLでコンパイルされておらず、ベンダーのWebサイトから世界の反対側にあるESXiホストに直接OVAをダウンロードしたいので、私はこの道を切り始めました。
ファイアウォールを無効にする(lazy)/ルールを編集して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ライブラリは一種のペアダウンですが、オープンソースのweaselインストーラはhttpsにurllibを使用しているようでした。