PythonでYouTubeの音楽を複数ダウンロード

今回はPythonYouTubeの音楽を複数ダウンロードするということを行います。

f:id:astrophysik928:20190506212828p:plain

おおまかな流れとしては

①エクセル(youtube_url.xlsm、pythonファイルと同じディレクトリに置く)にダウンロードしたいYouTubeの音楽のURLを記載
②ダウンロード先を指定
Pythonファイル(download_youtube.py)を実行し、YouTubeをダウンロードする

となります。そのため、YouTubeをダウンロードする機能エクセルにアクセスする機能を中心に書いていきます。

デモは次のようになります。
まず、エクセルの「保存したいYouTubeのURL」の列にダウンロードしたいYouTubeのURLを記載します。ダウンロード先はマクロの機能で、選択できるようにしています。今回はエクセルと同じディレクトリを指定しました。
f:id:astrophysik928:20190506213120p:plain


そしてコマンドプロンプトを立ち上げ、
python download_youtube.py
を実行します。


f:id:astrophysik928:20190506213138p:plain
最終的に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のダウンロードに少し遅いので、バイト量を区切ってダウンロードするようにすればよかったと思います。以下のサイトが参考になるでしょう。

qiita.com


まだまだ改善点は多いです。