Web上のデータを取得する際、最も頻繁に使用されるのが GET リクエストです。Pythonの requests ライブラリを使用すれば、単にURLへアクセスするだけでなく、検索条件などのパラメータを付与したリクエストも、辞書(dict)形式で直感的に記述できます。
ここでは、基本的なアクセス方法と、params 引数を使用して安全にパラメータを送信する方法を解説します。
実行可能なサンプルコード
以下のコードは、ホテルの空室検索APIを叩くシナリオを想定しています。接続先には、送信したリクエスト内容をそのままJSONで返してくれるテスト用サービス httpbin.org を使用しているため、実際にパラメータがどのようにURLに付与されたかを確認できます。
import requests
def main():
# ---------------------------------------------------------
# 1. 基本的なGETリクエスト
# ---------------------------------------------------------
print("=== 1. Basic GET Request ===")
# 対象のURL(ここではリクエスト内容をエコーバックするテスト用API)
base_url = "https://httpbin.org/get"
# リクエストの送信
response = requests.get(base_url)
# 結果の確認(ステータスコードとレスポンスの一部)
if response.status_code == 200:
print("Success!")
# レスポンスボディ(文字列)を表示
print(f"Response Body (Start): {response.text[:100]}...")
else:
print(f"Failed with status: {response.status_code}")
# ---------------------------------------------------------
# 2. パラメータ付きのGETリクエスト(推奨される方法)
# ---------------------------------------------------------
print("\n=== 2. GET Request with Parameters ===")
# 検索条件:京都にある、2名1室、禁煙の部屋を探す想定
# URLの末尾に「?location=kyoto&guests=2...」と手書きする必要はありません
search_params = {
"location": "Kyoto",
"check_in": "2025-10-01",
"guests": 2,
"is_smoking": False,
"keyword": "温泉 & 露天風呂" # スペースや特殊文字も自動でエンコードされます
}
# params引数に辞書を渡すだけで、自動的にクエリパラメータが生成されます
response_with_params = requests.get(base_url, params=search_params)
# 実際に生成されたURLを確認
print(f"Generated URL: {response_with_params.url}")
# サーバー側が受け取った引数を確認(httpbinはargsフィールドにパラメータを返します)
data = response_with_params.json()
print("\nServer received params:")
for key, value in data['args'].items():
print(f" {key}: {value}")
if __name__ == "__main__":
main()
解説:params引数を使うメリット
URLの末尾に ?key=value&key2=value2 と文字列連結でパラメータを作成することも可能ですが、requests.get() の params 引数を使用することには以下の大きなメリットがあります。
1. URLエンコードの自動化
上記のコード例にある 温泉 & 露天風呂 のような日本語や、& などの特殊記号を含んでいても、ライブラリが自動的に %E6%B8%A9%E6%B3%89... のように正しい形式(URLエンコード)に変換してくれます。
2. コードの可読性と保守性
巨大なURL文字列を作るよりも、Pythonの辞書としてパラメータを管理する方が、値の変更や条件分岐によるパラメータの追加・削除が容易になります。
3. 型の自動処理
整数(int)や浮動小数点数(float)なども、自動的に文字列に変換して送信してくれます。
