
普段私たちがWebサイトを見たり、SNSを使ったりするとき、裏側ではHTTP通信が行われています。プログラミングでWebサービスと連携したり、Web上の情報を取得したりする際には、このHTTP通信を自在に操る必要がありますね。
requestsは、まるでWebとスマートにおしゃべりするような感覚で使えますよ。
概要
Pythonには標準ライブラリとしてHTTP通信を行うurllibモジュールがありますが、より直感的で使いやすいインターフェースを提供するのがrequestsライブラリです。requestsは、HTTPのGETやPOSTといった様々なメソッドを非常にシンプルに記述でき、Web開発者やデータサイエンティストにとって、もはや必須と言える存在となっています。
メリット
requestsライブラリを使うことには、多くのメリットがあります。
- 直感的なAPI:
requests.get()やrequests.post()のように、メソッド名がそのままHTTPメソッドに対応しているため、非常に読みやすく書きやすいコードになります。 - 豊富な機能: セッション管理、リダイレクトの自動処理、タイムアウト設定、認証機能、ファイルアップロードなど、Web通信に必要な多くの機能を簡単に利用できます。
- データ形式の自動処理: 特にJSON形式のデータを扱う際に真価を発揮します。
response.json()と記述するだけで、取得したJSONデータをPythonの辞書やリストとして直接扱えるため、非常に便利です。 - SSL検証のデフォルト有効化: セキュリティ面も考慮されており、デフォルトでSSL証明書の検証が行われます。
- 高い人気と安定性: 多くのWebサービス開発やスクレイピング、API連携プロジェクトで利用されており、信頼性が非常に高いです。
サンプルコード
それでは、実際にrequestsを使ってHTTP通信を行ってみましょう。
1. GETリクエストでWebページを取得する
import requests
try:
# GoogleのトップページにGETリクエストを送信
response = requests.get('https://www.google.com')
# ステータスコードが200(成功)か確認
if response.status_code == 200:
print("リクエスト成功!")
# レスポンスのHTMLコンテンツを表示(一部抜粋)
print(response.text[:500]) # 先頭500文字のみ表示
else:
print(f"リクエスト失敗: ステータスコード {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"リクエスト中にエラーが発生しました: {e}")2. GETリクエストでWeb APIからJSONデータを取得する
ここでは、ダミーのAPIからJSONデータを取得してみます。
APIからデータを取得する際は、JSON形式で返ってくることが多いので、response.json()がとても便利なんです!
import requests
try:
# ユーザー情報を取得するダミーAPIにGETリクエストを送信
api_url = 'https://jsonplaceholder.typicode.com/users/1'
response = requests.get(api_url)
if response.status_code == 200:
# JSONデータをPythonの辞書に変換
user_data = response.json()
print("APIからのデータ取得成功!")
print(f"ユーザー名: {user_data['name']}")
print(f"メールアドレス: {user_data['email']}")
else:
print(f"APIからのデータ取得失敗: ステータスコード {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"リクエスト中にエラーが発生しました: {e}")3. POSTリクエストでデータを送信する
ダミーのAPIにPOSTリクエストで新しい投稿データを送信してみましょう。
import requests
try:
# 新しい投稿を作成するダミーAPIにPOSTリクエストを送信
post_url = 'https://jsonplaceholder.typicode.com/posts'
# 送信するデータ
payload = {
'title': '私の初めての投稿',
'body': 'requestsライブラリを使って、POSTリクエストを送信しました!',
'userId': 1
}
# JSON形式でデータを送信
response = requests.post(post_url, json=payload)
if response.status_code == 201: # 201は作成成功
print("POSTリクエスト成功!")
# サーバーからのレスポンスを表示
print(response.json())
else:
print(f"POSTリクエスト失敗: ステータスコード {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"リクエスト中にエラーが発生しました: {e}")みーちゃんのワンポイント
requestsを使う上で最も重要なのは、通信が成功したかどうかの確認(ステータスコード)と、例外処理をきちんと行うことです。response.status_codeで結果をチェックし、try-exceptでrequests.exceptions.RequestExceptionを捕捉することで、予期せぬネットワークエラーなどにも柔軟に対応できますよ。

