【Python・Requests】Webファイルダウンロード・コード使い方解説|PDF・画像・CSVデータ収集自動化

こんにちは、Kosei(@kay_diacc2)です!

本記事では「Pythonを用いてWeb上のファイルを自動でダウンロードするプログラミング手法」を紹介します。ファイル情報を取得するモジュールとしてRequestsを利用します。また、Web上でダウンロードしたファイルを「PCローカル環境に保存する方法」も伏せてご紹介します。

目次

Python・Requestsを用いたWebファイルダウンロードについて

Web上のファイルをダウンロードする処理は、上図のようにHTTP通信と同様の流れになります。

①クライアント側がダウンロードしたいファイル(画像、テキスト、pdfファイル等)リンクを指定し、HTTPリクエストを送信すると、②Webサーバー側がファイルコンテンツに対応するHTTPレスポンスを返します。

本記事で紹介するWeb上からファイルをダウンロードする方法の特徴は、上図HTTP通信における処理をPythonプログラムで代替するイメージを持っていただければと思います。

プログラミング手順

プログラミング作業の流れを下記に示します。各手順で活用するPythonメソッドの詳細は、後述のプログラミング手法と合わせて解説します。

プログラミング手順 活用メソッド
1 Web上のファイルデータをダウンロード Requests.get()
2 ハードウェア・ローカル環境保存用にファイルを作成 open()
3 ローカルファイルにWebからダウンロードしたファイルデータを書き込む iter_content()
write()

事前準備

実際のプログラミングではrequrestsモジュールを用い、Webからファイルをダウンロードします。下記コマンドを入力し、事前にモジュールをインストールしましょう。

pip install requests

Web上のファイルデータをダウンロード

ここからはプログラミング解説になります。HTTP通信に基づきWeb上からファイル情報を取得するには、requests.get()メソッドを用います。Webサイトのデータを取得する際に広く用いられるメソッドです。下記のようにコードを記載しましょう。

#モジュール読込
import requests

url = "ダウンロードしたいファイルリンクを記載"
response = requests.get(url)

ハードウェア・ローカル環境保存用にファイル作成

上記で取得したWeb上のファイルデータをお手元のPC等に保存するには、そのデータを書き込むためのローカルファイルを事前に作成しておく必要があります。下記のようにコードを記載しましょう。

file = open("ファイル名.拡張子","wb")

ローカルファイルの作成では、open関数を用います。open関数とはファイル操作を行うためのメソッドであり、新規ファイルの作成や書き込み、読込、更新操作を実行できます。今回は、open関数に”wb”を渡し、バイナリ書き込みモードで新規をファイル生成しています。

ローカルファイルにWebからダウンロードしたファイルデータを書き込む

ローカルファイルにWeb上から取得したファイルデータを書き込むには、下記のようにコードを実行します。

#iter_content()メソッドでWebファイルのデータを渡す
for chunk in response.iter_content(100000):
    #ファイル書込
    file.write(chunk)
    
#ファイルを閉じる
file.close()

Webページのファイルデータを書き込むには、for構文とiter_content()メソッドを用います。まず、ループの繰り返し毎に、iter_content()メソッドでファイルデータのチャンクを返します。

チャンク(Chunk)とは、多量のデータ通信を行う際にデータを分割し、断片的なデータとして1つに纏めたものを指します。1つ1つのチャンクは、データ全体における情報(データ種類、データ長、識別子等)が付与されています。各チャンクを連ねてデータ全体を再構築する方法は、画像や動画など大きなサイズのバイナリデータの保存や送受信を行なう際に広く用いられます。

各チャンクに格納する最大バイト数は指定可能です。100キロバイトが適切なサイズであるため、iter_content()の引数には100000を渡しています。各チャンクをローカルファイルに書き込む方法としては、write()メソッドを用います。

プログラミング手法のまとめ

以上でプログラミングの解説は全て終了です!最後に使いやすい関数形式で本日紹介したコード全量を示します。

import requests
import os 

url = "ダウンロードしたいファイルリンクを指定"
file_dir = "ファイルの保存先指定"


def download_files(url,file_dir):
    
    #Web上のファイルデータをダウンロード
    response = requests.get(url)
    
    #HTTP Responseのエラーチェック
    try:
        response_status = response.raise_for_status()
    except Exception as exc:
        print("Error:{}".format(exc))
    
    
    # HTTP Responseが正常な場合は下記実行
    if response_status == None:

        #open()関数にwbを渡し、バイナリ書き込みモードで新規ファイル生成
        file = open(os.path.join(file_dir,os.path.basename(url)),"wb")

        #各チャンクをwrite()関数でローカルファイルに書き込む
        for chunk in response.iter_content(100000):
            file.write(chunk)

        #ファイルを閉じる
        file.close()
        print("ダウンロード・ファイル保存完了")

「第一引数:ダウンロードしたいWebファイルのリンク」「第二引数:ファイルの保存先(ディレクトリ)」を渡すdownload_files()関数です。下記のように記載し関数を実行してみましょう。

url = "ダウンロードしたいファイルリンクを指定"
file_dir = "ファイルの保存先指定"

download_files(url, file_dir)

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる