この記事では、PythonでWeb上のコンテンツやファイルをダウンロードするための、非常に人気のあるサードパーティ製ライブラリrequests
の基本的な使い方を解説します。
requests
モジュールのインストール
requests
はPythonの標準ライブラリではないため、使用する前にインストールが必要です。ターミナルまたはコマンドプロンプトで以下のコマンドを実行してください。
pip install requests
requests.get()
でWebページをダウンロードする
requests.get()
関数は、指定したURLにHTTP GETリクエストを送信し、サーバーからのレスポンスをResponse
オブジェクトとして返します。
import requests
# Aozora Bunkoからテキストファイルをダウンロード
res = requests.get('https://www.aozora.gr.jp/cards/000081/files/462_15405.html')
# Responseオブジェクトの属性を確認
print(f"レスポンスの型: {type(res)}")
print(f"ステータスコード: {res.status_code}")
# ステータスコード200は成功を意味する
if res.status_code == 200:
print("ダウンロードに成功しました。")
print(f"コンテンツの長さ: {len(res.text)}文字")
# 最初の300文字を表示
print(res.text[:300])
エラーチェック
リクエストは、ページが存在しない(404エラー)やサーバー側の問題(500エラー)など、様々な理由で失敗する可能性があります。Response
オブジェクトのraise_for_status()
メソッドは、リクエストが失敗した場合(ステータスコードが4xxまたは5xxの場合)にHTTPError
例外を発生させます。
このメソッドをtry...except
ブロックで囲むことで、ダウンロードエラーを適切に処理できます。
import requests
# 存在しないURLへのリクエスト
res = requests.get('https://example.com/non_existent_page')
try:
res.raise_for_status()
except Exception as exc:
print(f"ダウンロードに問題がありました: {exc}")
raise_for_status()
を呼び出すことで、ダウンロードが成功したかどうかのチェックを簡単に行うことができます。
ダウンロードしたファイルを保存する
requests
で取得したコンテンツをローカルファイルに保存するには、iter_content()
メソッドとwith open()
構文を組み合わせるのが一般的です。iter_content()
は、大きなファイルでもメモリを使いすぎることなく、少しずつ(チャンク単位で)ダウンロードするのに役立ちます。
ファイルを書き込む際は、バイナリモード('wb'
)で開くのが確実です。これにより、テキストファイルだけでなく、画像やPDFなどのあらゆる種類のファイルを正しく扱うことができます。
import requests
# ダウンロードしたいテキストファイルのURL
res = requests.get('https://www.aozora.gr.jp/cards/000081/files/462_15405.html')
# ダウンロードが成功したか確認
res.raise_for_status()
# 'wb'(バイナリ書き込み)モードでファイルを開く
with open('NatsumeSoseki_Bocchan.html', 'wb') as file:
# 10万バイトずつのチャンクでループ
for chunk in res.iter_content(100000):
file.write(chunk)
print("ファイルを保存しました。")
このコードは、夏目漱石の「坊っちゃん」のHTMLをダウンロードし、NatsumeSoseki_Bocchan.html
という名前で保存します。with
文を使うことで、ファイルの書き込みが終わった後に自動でファイルが閉じられるため安全です。
まとめ
requests
モジュールは、Webからのデータ取得を簡潔に記述できる強力なツールです。requests.get()
でコンテンツを取得し、raise_for_status()
でHTTPエラーをチェックし、iter_content()
とwith open()
を組み合わせてファイルに保存するという流れが、基本的なダウンロード処理の定石です。