PythonでHTTP経由でファイルをダウンロードする方法
Python
では、HTTPを通じて簡単にファイルをダウンロードするための方法がいくつかあります。代表的な方法は、標準ライブラリのurllib
モジュールと、外部ライブラリのrequests
を使ったアプローチです。
urllib
を使用したファイルダウンロード
Python
の標準ライブラリであるurllib
を使うと、非常にシンプルにファイルをダウンロードできます。以下の例では、urllib.request.urlretrieve()
を使用して、指定したURLからファイルを保存しています。
import urllib.request
urllib.request.urlretrieve('http://example.com/file.zip', 'file.zip')
このメソッドは直接ファイルをダウンロードして保存するため、非常に簡単です。ただし、urlretrieve
は「レガシーインターフェース」として将来的に非推奨になる可能性があります。
requests
を使用したファイルダウンロード
もう一つの方法として、外部ライブラリrequests
を使う方法があります。requests
は、より直感的なAPIを提供しており、特に認証や複雑なリクエスト処理が必要な場合に有用です。ファイルをダウンロードする基本的な例は以下の通りです。
import requests
url = 'http://example.com/file.zip'
response = requests.get(url)
with open('file.zip', 'wb') as f:
f.write(response.content)
この方法では、HTTPレスポンス全体をメモリに保持し、その後ファイルに書き込むため、大きなファイルをダウンロードする際には注意が必要です。
大きなファイルのダウンロード - ストリーミング
大きなファイルをダウンロードする際は、requests.get()
のstream=True
オプションを使用して、ファイルをチャンクごとにダウンロードしながら保存することでメモリ使用量を抑えることができます。
import requests
url = 'http://example.com/largefile.zip'
response = requests.get(url, stream=True)
with open('largefile.zip', 'wb') as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
この方法では、ファイルのチャンクサイズ(ここでは1024バイト)に分割して読み込むことで、メモリ効率が向上します。
まとめ
Python
でHTTP経由のファイルダウンロードは、urllib
やrequests
を使用して簡単に実装できます。特に、requests
は直感的で扱いやすいライブラリとして人気があり、ファイルのサイズに応じてストリーミング機能を活用することで、大きなファイルも効率的にダウンロードできます。