PythonのrequestsモジュールでWebサイトからファイルをダウンロードする方法

この記事では、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()を組み合わせてファイルに保存するという流れが、基本的なダウンロード処理の定石です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次