PythonでYouTubeの音楽を複数ダウンロード
今回はPythonでYouTubeの音楽を複数ダウンロードするということを行います。
おおまかな流れとしては
①エクセル(youtube_url.xlsm、pythonファイルと同じディレクトリに置く)にダウンロードしたいYouTubeの音楽のURLを記載
②ダウンロード先を指定
③Pythonファイル(download_youtube.py)を実行し、YouTubeをダウンロードする
となります。そのため、YouTubeをダウンロードする機能とエクセルにアクセスする機能を中心に書いていきます。
デモは次のようになります。
まず、エクセルの「保存したいYouTubeのURL」の列にダウンロードしたいYouTubeのURLを記載します。ダウンロード先はマクロの機能で、選択できるようにしています。今回はエクセルと同じディレクトリを指定しました。
そしてコマンドプロンプトを立ち上げ、
python download_youtube.pyを実行します。
最終的に2曲ダウンロードできました。数分かかりました。
ソースコードは次のようになります。
PythonでYouTubeの音楽を複数ダウンロード
ソースコードの概要としては、
①エクセルに記載されたYouTubeのURLを読み込む。
②URLをリスト「youtube_url_list」に格納していく。
③リストから1つづつURLを読み込み、ダウンロードしていく。というものです。
①YouTubeのダウンロード
Pythonには「pytube」というYouTubeから動画や音声をダウンロードするためのライブラリがあります。pytubeを利用するためにインストールする必要があります。2019/5/6時点ではバージョンは9.5.0でした。
pip install pytube
YouTubeをダウンロードする機能はこの一行だけです。
yt.streams.get_by_itag(140).download(output_path)
「yt」にYouTubeのURLが格納してあり、「output_path」にダウンロード先のパスを格納します。
「get_by_itag(140)」でほしいデータの形式を指定します。mp4の音声データが欲しいなら140、mp4で動画データが欲しいなら137に指定します。
②エクセルへのアクセス
xlwingsというライブラリを使います。インストールします。
pip install xlwings
インストール後、ソースコードの最初に
「import xlwings as xw」と記述します。
get_youtube_url = xw.Range(cell_address).value
get_output_path = xw.Range('B3').value
いずれも「xw.Range(cell_address).value」でエクセルのセルの番地(A1,B2など)を指定し、そこの値を取得しています。
なお、エクセルファイル(youtube_url.xlsm)はPythonコードと同じディレクトリにあります。同じディレクトリなので今回は読み込むエクセルファイル名を指定していません。
④振り返り
他にも当初はYouTubeをダウンロードできていたのに、急にダウンロードできなくなるという現象がありました。その時はpytubeをアンインストールして、最新バージョンのpytubeをインストールすることで解決しました。
xlwingsを使っているのでVBAからのボタン操作で完結するようにしたかったのですが、モジュールを多かったせいか、できませんでした。
また、YouTubeのダウンロードに少し遅いので、バイト量を区切ってダウンロードするようにすればよかったと思います。以下のサイトが参考になるでしょう。
まだまだ改善点は多いです。