【データの集めかた講座】Youtubeのデータを集める
はじめに
ごあいさつ
ご高覧いただきありがとうございます.
ソフトウェアエンジニアのKitaharaです.
本日はyoutubeデータの収集方法を解説します!
Youtubeにはどのようなデータが埋まっている?
Youtubeには色々なデータが存在する
皆さんはYoutubeのデータと聞いてどのようなデータを想像しますか?
動画データ, 画像データ, 再生数のデータ, いいね数のデータ等々…
多種多様なデータがあると思います.
実際に今回使用するコードを使うと以下のようなデータを抽出することができます.
動画の情報
etag
id
種類
youtubeだけにあるものか
ライブ放送のアーカイブかどうか
映画か動画か
カテゴリー
言語
タイトル
説明欄
タグ
投稿日時
サムネイル
統計
コメントの数
ふぁぼの数
いいねの数
再生回数
投稿者の情報
投稿者のチャンネルID
投稿者のチャンネルタイトル
これだけあれば, 色々な知見が得られそうですね.
例えば, 検索上位に表示される動画のタイトルの特徴やタグの特徴を知るだけでも良い知見になります.
また, 上位の動画の投稿時間をみることができればどのような日にち, 時間帯に投稿することが有効なのかを知ることができそうです.
また, 付録にのせますが, 動画検索APIでは再生数順の以外にもマッチ度順や日付順等を使用することができます. これによって得られたデータを比較して再生数に繋がりやすい特徴を抽出することができるかもしれません.
使用するものの説明
Youtube Data APIを使うと効率よくyoutubeの情報を検索することができます. seleniumで検索すればいいじゃんと思われる方もいますが, APIを使った方がきれいに書けますし, 実行時間も短いです.
Youyube Data API v3
Google Cloud Platformで使うことのできるAPIです.
API KEYが必要なタイプのAPIなので事前に取得しておく必要があります
Python
プログラミング言語のひとつです.
型宣言等が無く, 初心者にも扱いやすい言語だと言われています
近年Deep Learningのライブラリが豊富であることから注目を集めている人気の言語です
Google Colab
Googleが提供するPythonの実行環境です
主要なライブラリがインストールされている状態で使うことができます
Chromeでアクセスするだけで利用することができます
環境構築が不要です
無料で使うことができます
環境構築
Youtube Data API v3
下記のコードをGoogle Colubで実行してください
# Google Colubでコマンドを打つときは「!」を先頭に付ける
!pip install google-api-python-client
これで今回使うライブラリはすべて揃いました!
検索してみる
Youtube Data APIの動画検索ですが, 動画検索をするメソッドのsearchメソッドでは詳細な情報(例えば再生数)等を取得することができません. (再生数を取得できないことにかなり驚きました)
そこで, seachメソッドとvideosメソッドを組み合わせて情報を収集していきます. videosメソッドは動画idを元に詳細情報を検索するのですが, この動画idはsearchメソッドで取得できるのでそれを使って詳細検索をします.
早速コードを書いていきましょう
試しに「プログラミング学習」というクエリで動画時間が20分を超える動画で検索してみます.
まず基礎設定をした後に検索する関数を書いていきます.
from apiclient.discovery import build
# Youtube API settings
api_key = 'YOUR API KEY'
youtube_api_service_name = 'youtube'
youtube_api_version = 'v3'
youtube = build(
youtube_api_service_name,
youtube_api_version,
developerKey = api_key
)
def show_video_infomation(keyword, max_num_of_data):
# search settings
youtube_search_query = youtube.search().list(
part = 'id,snippet',
q = keyword,
type = 'video', # 型宣言のtypeではなく, apiのパラメータ
maxResults = max_num_of_data,
order = 'viewCount',
videoDuration='long'
)
# 検索を実行
youtube_response = youtube_search_query.execute()
# id情報を取り出す
video_info_list= youtube_response.get('items', [])
id_list = [video_info['id']['videoId'] for video_info in video_info_list]
# 詳細情報を検索して取り出す
video_detail_data = []
for video_id in id_list:
youtube_detail_search_query = youtube.videos().list(
part = 'snippet,statistics',
id = video_id
)
response = youtube_detail_search_query.execute()
video_detail_data.append(response.get("items")[0])
return video_detail_data
関数が書けたら実行していきます.
ただ, 途中に出てくるリスト内包表記は少し難しいかもしれないので解説します. (リスト内包表記は通常のfor文より実行速度が速いのでよく使われます)
# 通常のfor文
new_hoge = []
for i in range(len(hoge_list)):
new_hoge.append(hoge_list[i])
# リスト内包表記
new_hoge = [hoge_list[i] for i in range(len(hoge_list))]
早速書いてみましょう
video_infomation_list = show_video_infomation('プログラミング学習',5)
title_list = [video_infomation['snippet']['localized']['title'] for video_infomation in video_infomation_list]
description_list = [video_infomation['snippet']['localized']['description'] for video_infomation in video_infomation_list]
view_count_list = [video_infomation['statistics']['viewCount'] for video_infomation in video_infomation_list]
データを表示してみます
print(view_count_list)
# ['1572791', '1224399', '727724', '224057', '117582']
なんと20分以上なのに100万回再生されている動画が存在するようです.
print(title_list[:2])
# ['【初心者向け】プログラミング学習の始め方【3ヶ月で達成できる】', 'Python超入門コース 合併版|Pythonの超基本的な部分をたった1時間で学べます【プログラミング初心者向け入門講座】']
やはりPythonは人気の言語のようですね.
一位の方はブロガーの方だったのでPHPの紹介をしているのかもしれないですね. (ブログ等でよく使われるWordPressは内部がPHPで作られています)
おわりに
今回はPythonを使ってYoutubeのデータを収集する方法を解説しました!
参考になったという方はぜひハートボタンを押していってください!
モチベーションが上がります!
あと, 今回の記事のサムネは公式のように見えたかもしれません. ですが, 自分で作っていますのでご安心ください!
(NoteのサムネはPowerPointで作っています.)
記事内で不明な点等ございましたら気軽にご連絡ください.
Twitter: @kitahara_dev
email: kitahara.main1@gmail.com
付録
Google Colabを見れるようにしました.
Youtube v3 API の searchメソッドのパラメータのドキュメントを Markdownにして読みやすくしました.
おまけ
本編で使おうとおもっていたのですが, 使わなかったので公開します.
wikipediaのデータをもとに作ったプログラミング言語のリストです.
下記のコードを実行するとlanguage_name_listに小文字表記の言語名が格納されます.
language_name_list = []
with open('language.txt') as f:
for line in f:
# 小文字にして空白文字を消す
print(line)
language_name = line.lower().replace(' ','').replace('\n','')
language_name_list.append(language_name)
参考文献
この記事が気に入ったらサポートをしてみませんか?