【Python】youtube急上昇ランキングベスト10を取得してみたよ【Selenium】

【Python】youtube急上昇ランキングベスト10を取得してみたよ【Selenium】

はじめに

コジマです。

seleniumを使ったスクレイピングの勉強がてら少し情報収拾をしてみようかと思ったのでやってみます。

今回は以下のUdemy講座で学んだ知識を応用してみました。
PythonによるWebスクレイピング入門 〜業務効率化への第一歩〜

前提

私は以下の環境で実行を行いました。

  • OSはMac
  • Python 3.6.7
  • Jupyter Notebook 5.7.4
  • selenium 3.141.0
  • ブラウザはGoogle Chrome

seleniumとは?

毎度ながらざっくりと。
selenium(セレニウム)はブラウザのオートメーションツールで、自動でブラウザを操作することができます。

Webサイトの自動テストができたりするのですが、今回はこれでスクレイピングをしてみたいと思います。

前準備

Jupyter Notebookはインストールされている前提で話を進めます。

以下のコマンドを実行してブラウザをドライバーをインストールしてください。
プログラムから自動でブラウザを操作するために必要です。
brew install chromedriver

方針

方針としては

  • seleniumを使用してyoutubeの急上昇にアクセス
  • 動画タイトルをid=video-title内に持っているので取得する
  • 10件分抽出する
  • 整形する

って方針でいきます。
今回はさっくりと動画タイトル動画URLだけを取得することにします。
うまいこと指定していけば投稿者とか再生数も取れます。

実装

これができあがりのプログラムです。
いつも通りgistに上げています。

解説していくよ

#seleniumとpandasのインポート
from selenium import webdriver
import pandas as pd

今回はブラウザ操作のためにselenium
データ整形のためにpandasを使用します。

#Google Chromeのドライバを用意
chrome = webdriver.Chrome()

この操作でGoogleChromeが起動します。
ブラウザのドライバはchromeという変数に入れておくことにしました。


こんな感じで起動します。

#youtubeのランキングを開く
url = 'https://www.youtube.com/feed/trending'
chrome.get(url)

get関数の引数にURLを指定することで、そのURLリンクを開くことができます。

こんな感じで起動します。

#ランキングを取得
ranking_videos = chrome.find_elements_by_id('video-title')

find_elements_by_id関数を使用しました。
指定したIDの情報を取得することができます。

ranking_videosという変数に入れました。

この引数にたどり着く方法が大事でして、ブラウザの開発者ツールを使用します。
実際に開いて、動画タイトル部分の要素を見るとvideo-titleというIDが指定されています。

このように欲しい情報に辿りついていくことが今回の山です。

hrefタグにURLがあることもここで把握しておいてください。

#トップ10を抽出
titles = []
urls = []
for ranking_video in ranking_videos:
    #titlesに動画タイトルを格納
    title = ranking_video.text
    titles.append(title)
    #urlsに動画URLを格納
    url = ranking_video.get_attribute('href')
    urls.append(url)
    
    #10件で終了
    if len(titles) == 10:
        break

取得した情報をループで配列に入れ直します。
ranking_video.textと指定することで
動画タイトルを抽出することができます。

また、get_attribute関数を使用することでHTMLタグに設定された値を抽出できます。
hrefタグで指定されたURLが欲しいので、今回はranking_video.get_attribute(‘href’)としました。

諸々確認のところは省略しますね。

pandasを使用して取得したデータを表で取得していきます。

#整形していく
#DataFrameの準備
df = pd.DataFrame()

#データを設定する
df['rank'] = range(1,11) #1位から10位
df['title'] = titles
df['URL'] = urls

#データを表示する
df

ここはpandasの基本的な部分で特筆すべき点はないかと思います。

to_csv関数を使用すればCSV出力することもできます。

#最後はブラウザを終了する
chrome.quit()

最後はブラウザを閉じるためにquit()関数を実行します。
忘れないようにしましょう。

これで以上になります。

さいごに

ちょっとスクレイピングしてみました。

これ、色々応用が効きそうですよね。
自動でプレイリストを作成したり、キーワード毎のトップ動画を集めたりとか。
他にもできそうです。

ただ、自由度がめちゃめちゃ高いので悪用厳禁です。マジで。

用法用量守って正しく楽しく使っていきましょ!

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

以上、コジマでした。


Pythonカテゴリの最新記事