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

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

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

目次

【Python×Requests】Webサイトからファイルをダウンロードする方法

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

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

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

プログラミング手順

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

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

事前準備

実際のプログラミングではrequrestsモジュールを用い、Webからファイルをダウンロードします。requestsモジュールを活用すると、ネットワークエラーや、インターネット接続上の問題、データ圧縮のような複雑の考慮点を意識することなく、容易にファイルをダウンロードできるようになります。

下記コマンドを入力し、事前にモジュールをインストールしましょう。

pip install requests

【Python】Webサイトからファイル情報をダウンロードしローカルに保存

ここからはプログラミング解説になります。手順に沿って1つずつみていきましょう!

requestsモジュール|Webからファイルデータをダウンロード

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

#モジュール読込
import requests

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

requests.get()にダウンロードするURLを文字列として渡すと、Responseオブジェクトが戻り値として得られます。

requests.get()メソッドによるリクエストが成功したかどうかはResponseオブジェクトのstatus_codeを活用して次のように確認することができます。ここでstatus_code = 200が出力されればリクエスト成功です。

# レスポンスのステータスコード
print(response.status_code)

# 出力イメージ
# 200

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

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

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()メソッドを用います。

【Python実践】Webサイトから画像をダウンロードしローカルに保存する

この見出しではWebサイトから画像データを取得・ローカル保存する方法を例としたPythonプログラミング手法を解説します。

画像URLは当サイトが提供するURLを指定しています。また、後述で示すコードは、前述で紹介したコーディング方法とほぼ同じであるため、具体的な解説は割愛します。

import requests

# 画像リンクを指定
url = "https://di-acc2.com/wp-content/uploads/2022/07/sampleimage.jpg"

# レスポンス
response = requests.get(url)

# ローカル環境にファイルを作成|今回画像であるため拡張子はjpegを指定
file = open("sample.jpg","wb")

# ファイルをローカルに書き込む
for chunk in response.iter_content(100000):
    file.write(chunk)
    
# ファイル保存完了
file.close()

【Python】Webファイルダウンロード用Pythonひな型コードまとめ

ここまでの解説をもとに、Webサイトからファイルをダウンロードする際のひな型コードを以下に示します。

画像やテキスト、CSV、PDF、HTMLなどダウンロードしたい様々なファイル拡張子に対して活用できるコードとなっています。

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()関数を実行すると、目的のファイルがWebから取得できるでしょう。

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

download_files(url, file_dir)

【参考】PythonでWebデータ収集するためのおすすめ学習法

Webデータ収集・おすすめ学習法

当サイトではPythonを用いてWebサイトから目的のデータを取得できるようになりたい方向けに、おすすめの学習教材についてもご紹介しています。

Webスクレイピングについて詳しく知りたい方はこちら

当サイトではWebスクレイピングを活用したデータ取得方法についても別途解説しています。

Webスクレイピング(Web Scraping)とは、WebサイトのHTMLからデータを抽出する技術を指します。スクレイピング、Webスクレイピングの他に、Webデータ抽出、データスクレイピング、ウェブ・クローラー、ウェブ・スパイダー等と呼ばれることもあります。

Webスクレイピング・データ取得に関する配信記事

最後に

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

本記事をシェア!
目次