YouTubeで再生回数の多い動画のurlを取得するではSelenium.Chrome.WebDriverを使ってデータを取得しましたが、今回はPuppeteerSharpをつかってデータを取得します。

それから前回の方法ではだいたいの再生回数と大体のアップロード日しか取得できませんでしたが、今回は動画ページにもアクセスして正確な再生数とアップロード日を取得します。またチャンネルページにもアクセスしてチャンネル開設日とチャンネル総再生数も取得します。

NuGetでPuppeteerSharpとClosedXMLをインストールします。そしてデザイナでこんな感じのものを作ります。

まず取得したデータを格納するクラスを作成します。

動画urlと動画に関する情報、チャンネル情報を格納します。

動画に関する情報は動画タイトル、動画url、アップロード日、再生数です。これをVideoInfoクラスに格納します。またチャンネルに関する情報はチャンネル名、チャンネルurl、チャンネル登録日、チャンネル総再生数です。これはChannelInfoクラスに格納します。

コンストラクタ内でBrowserオブジェクトとPageオブジェクトを生成します。準備ができるまでbutton1.Enabled = false;にして、処理のためのボタンを押すことができないようにします。

page1は検索結果の取得用、page2は動画ページの解析用、page3はチャンネルページ解析用です。

処理のためのボタンが押されたときの処理を示します。

自作メソッド GetDatasScrollを呼び出して動画情報とチャンネル情報を取得します。表示されているページの情報が取得できたらスクロールして下に書かれている情報も取得します。データが取得できたらExcelファイルとして保存します。

検索結果が表示されているページの情報を取得し、スクロールして下に書かれている情報も取得する処理を示します。HTMLを解析すればdiv.text-wrapper.style-scope.ytd-video-rendererを調べれば動画のタイトルやurlを取得できることがわかります。全部取得できたらスクロールさせて最大取得数に達するか全件取得できるまで繰り返します。

処理の進行状況を示すためにプログレスバーを表示させます。ひとつめは何件取得できたかを示すためのもので、もうひとつは1件の取得がどこまで完了したか(スリープしているあいだもプログレスバーを動かしてフリーズしてしないことを知らせる)です。

動画情報を取得する処理を示します。

検索結果のHTMLのdiv.text-wrapper.style-scope.ytd-video-rendererのなかにある

yt-formatted-string.style-scope.ytd-video-renderer
a#video-title.yt-simple-endpoint.style-scope.ytd-video-renderer
yt-formatted-string#text.style-scope.ytd-channel-name.complex-string
a.yt-simple-endpoint.style-scope.yt-formatted-string

を調べれば、動画タイトル、動画url、チャンネル名、チャンネルurlがわかります。

実際に動画urlにアクセスして再生数やアップロード日を取得する処理を示します。コード内にある要素を調べれば再生数やアップロード日が取得できます(説明手を抜きすぎ)。

実際にチャンネルurlにアクセスして登録日や総再生数を取得する処理を示します。チャンネルurlの後ろに/aboutをつければ概要ページにアクセスできます。その要素を調べれば必要な情報を取得できます(説明手を抜きすぎ)。

取得したデータをExcelファイルとして保存するメソッドを示します。

以下は「プログラミング」で検索した結果を取得したものです。Kan & Aki’s CHANNELかんあきチャンネルの総再生数は78.5億回。ヤバすぎます。