Skip to content

PyTubeによるYouTubeダウンロード時の403 Forbiddenエラー

問題の説明

Python 3.12環境でPyTube 15.0.0を使用し、YouTubeからオーディオストリームをダウンロードしていた際、以下のエラーが突然発生するようになりました:

http error 403 Forbidden

この現象が確認されるようになったのは2024年11月後半頃からで、YouTube側で仕様変更が行われたことが原因と考えられます。以下の対策を試しても効果がありませんでした:

  • innertube.py 内のユーザーエージェントを WEB または ANDROID に変更
  • PyTubeの完全アンインストールと再インストール

効果的な解決策

解決策1: pytubefixパッケージの使用 (推奨)

PyTubeの改良フォーク版であるpytubefixに切り替える方法です。この方法では既存コードを最小限の変更で継続できます。

bash
pip uninstall pytube
pip install pytubefix

コード変更例(import文のみ変更):

python
from pytubefix import YouTube  # pytube から pytubefix に変更

# 既存のコードをそのまま使用
yt = YouTube('https://www.youtube.com/watch?v=XXXXXXXXXXX')
stream = yt.streams.get_audio_only()
stream.download()

メリット

  • 既存のPyTubeコードと互換性が高い
  • シンプルな移行(import文の変更のみ)
  • コミュニティによる継続的なメンテナンス

解決策2: yt-dlpを使用した方法

yt-dlpはYouTubeダウンロードにおいてより堅牢な代替ライブラリです。追加機能が必要な場合やより詳細な制御を行いたい場合に適しています。

bash
pip install yt_dlp

基本実装コード:

python
from yt_dlp import YoutubeDL

URLS = ['https://www.youtube.com/watch?v=XXXXXXXXXXX']

options = {
    'format': 'bestaudio/best',
    'outtmpl': '%(title)s.%(ext)s',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'mp3',
        'preferredquality': '192',
    }]
}

with YoutubeDL(options) as ydl:
    ydl.download(URLS)

yt-dlp使用時の注意点

Bot判定される場合、以下の認証エラーが発生することがあります:

terminal
ERROR: [youtube] XXXXXXXXXXX: Sign in to confirm you’re not a bot.

認証エラー回避方法

方法1: cookies.txtファイルを使用

  1. Chrome拡張「Get Cookies.txt」をインストール
  2. YouTubeにログインした状態で拡張機能を使用しcookies.txtをエクスポート
  3. コードにcookieパスを指定
python
options = {
    'outtmpl': '%(title)s.%(ext)s',
    'cookiefile': '/path/to/cookies.txt'  # エクスポートしたファイルを指定
}

方法2: ブラウザから直接クッキーを取得

python
options = {
    'outtmpl': '%(title)s.%(ext)s',
    'cookiesfrombrowser': ('chrome',)  # 使用するブラウザを指定
}

各解決策の比較

方法インストール移行の容易さ追加機能認証の必要性
pytubefixpip install pytubefix⭐⭐⭐⭐⭐ (import変更のみ)基本機能に特化通常不要
yt-dlp(基本)pip install yt_dlp⭐⭐⭐ (オプション設定が必要)豊富なフォーマット対応不要
yt-dlp(認証版)上記+クッキー設定⭐⭐ (認証プロセス追加)高レート制限対応ログイン必須

まとめ

2024年末のYouTube仕様変更後、PyTubeで403エラーが発生している場合の解決方法は:

  1. 最も簡単な解決策: pytubefixパッケージへの切り替え(既存コードの改修が最小限)
  2. 高度な制御が必要な場合: yt-dlpの導入と必要に応じた認証設定

認証エラーが頻発する環境ではcookies.txtを併用することで安定したダウンロードが可能になります。状況に合わせて最適な方法を選択してください。