Python でファイルをダウンロードする

Siddharth Swami 2023年1月30日
  1. Python で requests モジュールを使用してファイルをダウンロードする
  2. Python で urllib モジュールを使用してファイルをダウンロードする
  3. Python で pycurl モジュールを使用してファイルをダウンロードする
Python でファイルをダウンロードする

Python は、インターネット上のリソースにアクセスするために非常に頻繁に使用されます。さまざまなライブラリを使用してリクエストと接続を生成できます。このようなライブラリは、Web から HTTP ファイルをダウンロードまたは読み取るのにも役立ちます。

このチュートリアルでは、Python でインターネットからファイルをダウンロードします。

Python で requests モジュールを使用してファイルをダウンロードする

requests モジュールを使用して、インターネットから情報を取得し、Web ページを読み取ることができます。

get() メソッドは、ファイルのダウンロード元となる指定された URL からファイルのパスを取得するのに役立ちます。open() メソッドは、ファイルを保存するファイルオブジェクトを作成し、write() 関数を使用してファイルの内容を目的のパスに書き込みます。

以下に示すように、これらの関数を使用してファイルをダウンロードします。

import requests as req

URL = "https://www.facebook.com/favicon.ico"
file = req.get(url, allow_redirects=True)

open("facebook.ico", "wb").write(file.content)

出力:

1150

上記のコードは、Facebook のロゴファイルをその URL からダウンロードし、作業ディレクトリに保存します。open() 関数では任意のパスを指定できますが、wb モードで開く必要があります。これは、ファイルをバイナリモードで書き込む予定であることを示しています。

上記の例は、小さいファイルのダウンロードには適していますが、大きいファイルでは効率的に機能しません。file.content 関数は、ファイルの内容を単一の文字列として取得するために使用されます。上記の例では小さなファイルを使用したため、正しく機能しました。

大きなファイルをダウンロードする必要がある場合は、チャンクサイズを指定する file.iter_content() 関数を使用する必要があります。チャンクの形式でデータをダウンロードします。

次の例では、この関数を使用します。

import requests

URL = "http://codex.cs.yale.edu/avi/db-book/db4/slide-dir/ch1-2.pdf"

file = requests.get(URL, stream=True)

with open("Python.pdf", "wb") as pdf:
    for chunk in file.iter_content(chunk_size=1024):

        if chunk:
            pdf.write(chunk)

Python で urllib モジュールを使用してファイルをダウンロードする

Python の urllib ライブラリを使用して、Web からファイルをダウンロードおよび読み取ることもできます。これは、特定のタスクを実行するためのさまざまな機能を持つ URL 処理モジュールです。

ここでも、ダウンロードするファイルの URL を指定する必要があります。urllib.request.urlopen() メソッドはファイルのパスを取得し、ファイルがダウンロードされているサーバーにリクエストを送信します。

ファイルをダウンロードするには、urllib.request.urlretrieve() 関数を使用できます。指定されたアドレスからリソースをダウンロードし、指定されたディレクトリに保存します。

次の例では、この方法を使用して Facebook のアイコンをダウンロードします。

import urllib

urllib.request.urlretrieve("https://www.facebook.com/favicon.ico", "fb.ico")

出力:

('fb.ico', <http.client.HTTPMessage at 0x2d2d317a088>)

上記の出力は、ファイルが正常にダウンロードされたことを示しています。

Python で pycurl モジュールを使用してファイルをダウンロードする

このモジュールでファイル処理を使用して、インターネットからファイルをダウンロードできます。まず、必要なファイルをダウンロードする場所のファイルオブジェクトを作成する必要があります。次に、pycurl.Curl() 関数を使用してオブジェクトを作成し、curl セッションを開始します。

setopt() メソッドは、ファイルの URL 値を設定するために使用されます。次に、perform() 関数は、HTTP リクエストを送信することにより、サーバーからのファイル転送プロセスを実行します。次に、ファイルオブジェクトを使用して、取得したデータをファイルに書き込みます。最後に、close() メソッドがセッションを閉じ、ファイルが作業ディレクトリにダウンロードされます。

以下のコードを参照してください。

import pycurl

file_name = "fb.ico"
file_src = "https://www.facebook.com/favicon.ico"

with open(file_name, "wb") as f:
    cl = pycurl.Curl()
    cl.setopt(cl.URL, file_src)
    cl.setopt(cl.WRITEDATA, f)
    cl.perform()
    cl.close()

関連記事 - Python HTTP