IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

Python pytubeでyoutube動画情報取得

どうも、nippa です。

今回はネタ記事で、たまたま見つけた pytube というライブラリを紹介したいと思います。

pytube は 軽量なライブラリで、ライブラリ依存性がない youtube の動画情報をするためのライブラリになります。

動画のダウンロードは法律に触れる可能性があります。また、Youtube利用規約を守って利用ください。くれぐれもご注意ください。

pytube 公式

環境

  • macOS 12.5
  • python3.9
  • pytube 12.1

ライブラリのインストール

  • pip
pip install pytube
  • poetry
poetry install pytube

動画の情報取得

使い方、以下のような形で情報を取得することができます。

from pytube import YouTube

YouTube("Youtube URL").streams.first()

first()で streams(再生設定の種類)の最初のものを指定して、情報を取得しています。

stream の確認

取得可能なストリートを確認します。

from pytube import YouTube

streams = YouTube(
    "Youtube URL"
).streams

for stream in streams:
    print(stream)

上記で、指定した Youtube 動画のストリームが確認でき、前節での first()は表示されたリストの最初のものを示しています。

first()の代わりに last()を利用すると、最後に表示されるストリームを指定することができます。

stream のフィルタリング

filter()を使って、オプションを1つ以上指定することで Stream をフィルタリングすることができます。

from pytube import YouTube

streams = YouTube("Youtube URL").streams

print("all stream")
for stream in streams:
    print(stream)

print("filter by resolution")
for stream in streams.filter(res="1080p"):
    print(stream)

print("filter by fps")
for stream in streams.filter(res="24fps"):
    print(stream)

print("filter by audio type")
for stream in streams.filter(only_audio=True):
    print(stream)

print("filter by mime_type")
for stream in streams.filter(mime_type="video/mp4"):
    print(stream)

print("filter by adaptive(DASH stream)")
for stream in streams.filter(adaptive=True):
    print(stream)

フィルターの種類はいろいろありますが、ソースコードを見るのが一番はやいです。

stream を指定して動画の情報取得

ストリームの詳細を表示すると、各ストリームに itag が振られています。

get_by_itag に int 型で引数を与えると、個別ストリームを取り出すことができます。

from pytube import YouTube

streams = YouTube("Youtube URL").streams
stream = streams.get_by_itag(22)
print(stream)

Playlist の情報取得

play list に登録されている動画情報を取得できます。

from pytube import Playlist

play_list = Playlist("Youtube Play List")

for video in play_list.videos:
    print(f"title: {video.title} URL: {video.watch_url}")

上では、プレイリストの各動画のタイトルと URL を表示しています。

Chanel の情報取得

channel に登録されている動画の情報を取得できます。

from pytube import Channel

channel = Channel("https://www.youtube.com/c/ProgrammingKnowledge")

print(f"チャンネルタイトル: {channel.title}")

for video in channel.videos:
    print(f"title: {video.title} URL: {video.watch_url}")

上ではチャンネルの動画すべてのタイトルとURLを表示しています。

Youtube の検索結果の取得

Search クラスを利用して検索結果の取得ができます。

from pytube import Search

search = Search("検索ワード")

print(len(search.results))
videos, next_continuation = search.fetch_and_parse()
for video in videos:
    print(video.watch_url)

next_continuationを指定することで、次の検索結果を fetch できます。

感想

今回 pytube についてご紹介しました。

動画情報収集をこのライブラリのみでできるのでデータ収集には非常に便利かもしれません。

ダウンロード機能もありますが、法律や利用規約に触れるため今回は紹介しませんでした。

youtubeの規約や動画の著作権がありますので、利用する場合はご注意ください。

ではでは、また次回。