【Python】URLからJSONを取得する方法

この記事では、Pythonのrequestsライブラリを使ってURLからJSONデータを取得し、そのデータをパースして利用する方法をわかりやすく解説します。

さらに、エラーハンドリングの方法や、実際の公共APIを使った具体的な例も紹介します。

初心者の方でも安心して学べる内容になっていますので、ぜひ最後までご覧ください。

目次から探す

必要なライブラリのインストールとインポート

PythonでURLからJSONデータを取得するためには、まず必要なライブラリをインストールし、インポートする必要があります。

ここでは、非常に便利なrequestsライブラリを使用します。

このライブラリはHTTPリクエストを簡単に行うためのもので、多くのPythonプログラマーに愛用されています。

requestsライブラリのインストール

まず、requestsライブラリをインストールする方法を説明します。

requestsライブラリはPythonの標準ライブラリには含まれていないため、pipを使ってインストールする必要があります。

以下のコマンドをターミナルまたはコマンドプロンプトで実行してください。

pip install requests

このコマンドを実行すると、requestsライブラリがインストールされます。

インストールが成功すると、次のようなメッセージが表示されます。

Successfully installed requests-2.25.1

requestsライブラリのインポート

requestsライブラリのインストールが完了したら、次にPythonスクリプト内でこのライブラリをインポートします。

インポートすることで、requestsライブラリの機能を使用できるようになります。

以下のようにインポートします。

import requests

これで、requestsライブラリを使ってHTTPリクエストを送信し、URLからJSONデータを取得する準備が整いました。

次のセクションでは、実際にURLからJSONデータを取得する方法について詳しく説明します。

URLからJSONを取得する基本的な方法

URLの指定

まず、JSONデータを取得したいURLを指定します。

例えば、公共のAPIからデータを取得する場合、そのAPIのエンドポイントURLを指定します。

以下の例では、サンプルのAPIエンドポイントを使用します。

url = "https://api.example.com/data"

requests.get()メソッドの使用

次に、requestsライブラリのget()メソッドを使用して、指定したURLからデータを取得します。

このメソッドは、指定したURLにHTTP GETリクエストを送信し、レスポンスを返します。

import requests
response = requests.get(url)

レスポンスの確認

requests.get()メソッドが返すレスポンスオブジェクトには、HTTPステータスコードやレスポンスボディなどの情報が含まれています。

まず、ステータスコードを確認して、リクエストが成功したかどうかをチェックします。

HTTPステータスコードが200の場合、リクエストは成功しています。

if response.status_code == 200:
    print("リクエスト成功")
else:
    print("リクエスト失敗: ステータスコード", response.status_code)

次に、レスポンスボディを確認します。

レスポンスボディは、response.textまたはresponse.contentで取得できますが、JSONデータの場合はresponse.json()メソッドを使用してパースするのが一般的です。

try:
    data = response.json()
    print("取得したJSONデータ:", data)
except ValueError:
    print("JSONデータのパースに失敗しました")

以上が、URLからJSONデータを取得する基本的な方法です。

次のセクションでは、取得したJSONデータをどのようにパースして利用するかについて詳しく説明します。

JSONデータのパースと利用

URLから取得したJSONデータは、そのままではPythonで扱いにくい形式です。

そこで、JSONデータをPythonのデータ型に変換(パース)する必要があります。

ここでは、JSONデータのパース方法と、パースしたデータの利用方法について詳しく解説します。

JSONデータのパース

まず、取得したJSONデータをPythonのデータ型に変換する方法を見ていきましょう。

requestsライブラリを使うと、非常に簡単にJSONデータをパースすることができます。

以下のコードは、URLから取得したJSONデータをパースする例です。

import requests
# URLを指定
url = "https://api.example.com/data"
# URLからデータを取得
response = requests.get(url)
# JSONデータをパース
data = response.json()
# パースしたデータを表示
print(data)

このコードでは、response.json()メソッドを使って、取得したJSONデータをPythonの辞書型に変換しています。

パースしたデータの利用方法

パースしたデータは、Pythonの辞書型やリスト型として扱うことができます。

ここでは、辞書型としてのアクセス方法とリスト型としてのアクセス方法について解説します。

辞書型としてのアクセス

JSONデータが辞書型にパースされた場合、キーを使ってデータにアクセスすることができます。

以下の例では、辞書型のデータにアクセスする方法を示しています。

# 辞書型のデータにアクセス
print(data['key1'])
print(data['key2']['subkey'])

このコードでは、dataが辞書型であることを前提に、キーを使ってデータにアクセスしています。

リスト型としてのアクセス

JSONデータがリスト型にパースされた場合、インデックスを使ってデータにアクセスすることができます。

以下の例では、リスト型のデータにアクセスする方法を示しています。

# リスト型のデータにアクセス
print(data[0])
print(data[1]['key'])

このコードでは、dataがリスト型であることを前提に、インデックスを使ってデータにアクセスしています。

以上が、JSONデータのパースと利用方法です。

次に、エラーハンドリングについて詳しく見ていきましょう。

エラーハンドリング

URLからJSONデータを取得する際には、さまざまなエラーが発生する可能性があります。

これらのエラーを適切に処理することで、プログラムの信頼性と安定性を向上させることができます。

ここでは、エラーハンドリングの基本的な方法について説明します。

ステータスコードの確認

HTTPリクエストが成功したかどうかを確認するために、レスポンスのステータスコードをチェックすることが重要です。

ステータスコードが200の場合はリクエストが成功したことを意味しますが、それ以外のコードが返された場合は何らかのエラーが発生している可能性があります。

以下は、ステータスコードを確認する方法の例です。

import requests
url = "https://api.example.com/data"
response = requests.get(url)
# ステータスコードの確認
if response.status_code == 200:
    print("リクエストが成功しました")
else:
    print(f"エラーが発生しました: {response.status_code}")

例外処理の実装

リクエストが失敗した場合や、JSONデータのパースに失敗した場合に備えて、例外処理を実装することが重要です。

Pythonのtryexceptブロックを使用して、これらのエラーをキャッチし、適切に処理することができます。

requests.exceptions.RequestExceptionの使用

requestsライブラリは、リクエストが失敗した場合にrequests.exceptions.RequestExceptionをスローします。

この例外をキャッチして、エラーメッセージを表示する方法を以下に示します。

import requests
url = "https://api.example.com/data"
try:
    response = requests.get(url)
    response.raise_for_status()  # ステータスコードが200でない場合に例外をスロー
    data = response.json()
    print("データを取得しました:", data)
except requests.exceptions.RequestException as e:
    print(f"リクエストエラーが発生しました: {e}")

JSONDecodeErrorの処理

JSONデータのパースに失敗した場合、json.decoder.JSONDecodeErrorがスローされます。

この例外をキャッチして、エラーメッセージを表示する方法を以下に示します。

import requests
import json
url = "https://api.example.com/data"
try:
    response = requests.get(url)
    response.raise_for_status()  # ステータスコードが200でない場合に例外をスロー
    data = response.json()
    print("データを取得しました:", data)
except requests.exceptions.RequestException as e:
    print(f"リクエストエラーが発生しました: {e}")
except json.decoder.JSONDecodeError as e:
    print(f"JSONデコードエラーが発生しました: {e}")

これで、リクエストの失敗やJSONデータのパースエラーに対する基本的なエラーハンドリングが実装できました。

エラーハンドリングを適切に行うことで、プログラムの信頼性と安定性を向上させることができます。

実践的な例

ここでは、実際に公共APIからJSONデータを取得し、そのデータを加工して表示する方法について解説します。

具体的な例として、無料で利用できる JSONPlaceholder というダミーAPIを使用します。

このAPIは、テストや学習目的で利用できる便利なツールです。

公共APIからのデータ取得

まずは、JSONPlaceholderからデータを取得する方法を見ていきましょう。

以下のコードは、ユーザー情報を取得する例です。

import requests
# URLを指定
url = "https://jsonplaceholder.typicode.com/users"
# GETリクエストを送信してレスポンスを取得
response = requests.get(url)
# ステータスコードを確認
if response.status_code == 200:
    # JSONデータをパース
    users = response.json()
    print(users)
else:
    print("データの取得に失敗しました。ステータスコード:", response.status_code)

このコードを実行すると、ユーザー情報がJSON形式で取得され、Pythonの辞書型として扱えるようになります。

取得したデータの加工と表示

次に、取得したデータを加工して表示する方法を見ていきます。

ここでは、ユーザー情報の中から特定のフィールドだけを抽出して表示する例を紹介します。

データのフィルタリング

まずは、ユーザー情報の中から「名前」と「メールアドレス」だけを抽出して表示する方法です。

# フィルタリングしたデータを格納するリスト
filtered_users = []
# 各ユーザーの情報をフィルタリング
for user in users:
    filtered_user = {
        "name": user["name"],
        "email": user["email"]
    }
    filtered_users.append(filtered_user)
# フィルタリングしたデータを表示
for user in filtered_users:
    print(f"名前: {user['name']}, メールアドレス: {user['email']}")

このコードを実行すると、各ユーザーの名前とメールアドレスだけが表示されます。

データの整形と表示

次に、フィルタリングしたデータを整形して表示する方法を見ていきます。

ここでは、ユーザー情報を表形式で表示する例を紹介します。

# 表のヘッダーを表示
print(f"{'名前':<20} {'メールアドレス':<30}")
# 各ユーザーの情報を表形式で表示
for user in filtered_users:
    print(f"{user['name']:<20} {user['email']:<30}")

このコードを実行すると、以下のような表形式でデータが表示されます。

名前                 メールアドレス
Leanne Graham        [email protected]
Ervin Howell         [email protected]
Clementine Bauch     [email protected]
Patricia Lebsack     [email protected]
Chelsey Dietrich     [email protected]
Mrs. Dennis Schulist [email protected]
Kurtis Weissnat      [email protected]
Nicholas Runolfsdottir V [email protected]
Glenna Reichert      [email protected]
Clementina DuBuque   [email protected]

このように、取得したJSONデータをPythonで加工し、見やすい形式で表示することができます。

これで、公共APIからデータを取得し、加工して表示する方法についての解説は終了です。

ぜひ、他のAPIやデータセットでも試してみてください。

目次から探す