Python を使用して Youtube データをスクレイピングする方法
公開: 2019-05-29YouTube は、ビデオ共有 Web サイトに関しては明らかな勝者として浮上しており、 1,600 億ドル以上の価値があると言われていますが、Web サイトを通じて生計を立てている人の数も膨大です。 これらのコンテンツ クリエーターは、YouTube パートナーシップ プログラムに参加し、コンテンツを収益化することで、広告を通じて莫大な収益を上げています。
YouTube からデータをスクレイピングする理由
YouTube のデータは、次のような幅広いユース ケースに役立ちます。
1. 最も気に入ったキーワードを見つける
特定の単語で YouTube に表示される上位の動画を見つけるために検索を実行するとします。 ここで、これらの各動画の好き嫌い、再生回数、タイトルをスクレイピングすると、YouTube のタイトルに挿入すると収益の向上につながるキーワードのリストを作成できます。
2.ハッシュタグを比較する
特定のハッシュタグを付けた動画の高評価数と視聴回数を比較することで、動画でどのハッシュタグを使用すれば人気が高まるのか、またはどのハッシュタグが動画のタイトルにより適しているのかを理解することができます。
3. 最も人気のあるチャンネルを見つける
YouTube で上位の動画を抽出すると、発生するチャンネル名の頻度グラフを作成できるため、人々が楽しんでいる上位のチャンネルを見つけることができます。 これは、YouTube 視聴者の間でどのトピックが最も人気があるかを理解するのにも役立ちます。
4. チャンネルの人気を追跡する
特定の YouTube チャンネルの新しくアップロードされた動画のデータを抽出することで、チャンネルの人気が上昇しているのか下降しているのか、停滞しているのかを知ることができます。
5. 動画の好き嫌い、視聴回数の記録
これらのビデオから一定の時間間隔でデータをスクレイピングすることにより、x 軸に時間をとり、y 軸に好き、嫌い、またはビューを持つグラフを作成できます。
コードから始めましょう:
この記事のような以前の「データをスクレイピングする方法」の記事でインストールと初期化のプロセスを説明したので、これらの手順を完了して準備ができていることを願っています.
コードを実行するには、python コマンドを使用し、プロンプトが表示されたら YouTube ビデオの URL を入力します。

以下のコードをファイルにコピーし、youtubeDataExtractor.py という名前を付けます (ただし、「.py」で終わる限り、実際には任意のファイル名を付けることができます)。
[コード言語=”パイソン”]
#!/usr/bin/python
# -*- コーディング: utf-8 -*-
urllib.request をインポート
urllib.parse をインポートする
urllib.error をインポート
from bs4 import BeautifulSoup
SSL のインポート
json をインポート
インポートアスト
json をインポート
OS のインポート
from urllib.request import リクエスト、urlopen
# SSL 証明書エラーを無視する場合
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
# ユーザーからの入力
url = input('YouTube 動画の URL を入力してください- ')
# Mozilla ブラウザを使用してアクセスしていると Web サイトに信じ込ませる
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
ウェブページ = urlopen(req).read()
# データを簡単に抽出するために、HTML ページの BeautifulSoup オブジェクトを作成します。
スープ = BeautifulSoup(ウェブページ, 'html.parser')
html = スープ.prettify('utf-8')
video_details = {}
その他の詳細 = {}
soup.findAll('span',attrs={'class':'watch-title'}) のスパンの場合:
video_details['TITLE'] = span.text.strip()
soup.findAll('script',attrs={'type': 'application/ld+json'}) のスクリプトの場合:
channelDesctiption = json.loads(script.text.strip())
video_details['CHANNEL_NAME'] = channelDesctiption['itemListElement'][0]['item']['name']
soup.findAll('div',attrs={'class':'watch-view-count'}) の div の場合:
video_details['NUMBER_OF_VIEWS'] = div.text.strip()
for button insoup.findAll('button',attrs={'title': 'I like this'}):
video_details['LIKES'] = button.text.strip()
for button insoup.findAll('button',attrs={'title': '私はこれが嫌い'}):
video_details['DISLIKES'] = button.text.strip()

スパンの場合はsoup.findAll('span',attrs={'class': 'yt-subscription-button-subscriber-count-branded-horizontal yt-subscriber-count'}):
video_details['NUMBER_OF_SUBSCRIPTIONS'] = span.text.strip()
ハッシュタグ = []
soup.findAll('span',attrs={'class':'standalone-collection-badge-renderer-text'}) のスパンの場合:
for a in span.findAll('a',attrs={'class': 'yt-uix-sessionlink'}):
ハッシュタグ.append(a.text.strip())
video_details['HASH_TAGS'] = ハッシュタグ
open('output_file.html', 'wb') をファイルとして使用:
ファイル.書き込み(html)
出力ファイルとして open('data.json', 'w', encoding='utf8') を使用:
json.dump(video_details, outfile, ensure_ascii=False,indent=4)
print ('————-データの抽出が完了しました.jsonファイルを確認してください.————-')
[/コード]
コードを実行すると、現在のディレクトリに data.json という名前の JSON が作成されます。 いくつかの人気のあるミュージック ビデオのコードを実行しました。これらに関連付けられた JSON は次のとおりです。
1.イマジン・ドラゴンズのサンダー–
[コード言語=”パイソン”]
{
“TITLE”: “イマジン・ドラゴンズ – サンダー”,
“CHANNEL_NAME”: “ImagineDragonsVEVO”,
“NUMBER_OF_VIEWS”: “1,182,556,781 ビュー”,
「いいね」:「6,693,559」、
「嫌い」:「337,823」、
“NUMBER_OF_SUBSCRIPTIONS”: “17M”,
「HASH_TAGS」: []
}
[/コード]
2.ドレイクのあなたの気持ちで
[コード言語=”パイソン”]
{
“TITLE”: “Drake – In My Feelings (Lyrics, Audio) “Kiki Do you love me””,
“CHANNEL_NAME”: “特別団結”,
“NUMBER_OF_VIEWS”: “278,121,686 ビュー”,
「いいね」:「2,407,688」、
「嫌い」:「114,933」、
“NUMBER_OF_SUBSCRIPTIONS”: “614K”,
“HASH_TAGS”: [
「#InMyFeelings」、
「#ドレイク」、
「#スコーピオン」
]
}
[/コード]
YouTube クローラー コードの説明:
いつものように、まず Web ページから HTML コードをスクレイピングし、それをローカル ディレクトリのファイルに保存します。これにより、それを分析し、簡単に抽出できて価値のあるデータ ポイントを見つけることができます。 HTML ページ内のデータ ポイントの調査のほとんどは、特定のキーワードまたは値を検索し、それらがどこで発生するかを見つけることによって、手動で行う必要があります。
HTML コードの特定の場所からデータを抽出するために BeautifulSoup (BS4) を使用しました。
- クラスが「watch-title」のスパン型要素は、ビデオのタイトルを見つけることができる場所です。
- タイプが「application/ld+json」のスクリプト要素には、チャネル名が含まれています。
- クラス watch-view-count を持つ div 要素は、特定の YouTube 動画の再生回数を取得するのに役立ちます。
- 'I like this' というタイトルのボタン要素には、その特定の動画に対するいいねの数が含まれています。
- 上記のポイントと同様に、「I dislike this」というタイトルのボタン要素には、特定の動画の低評価数のカウントがあります。
- クラス 'yt-subscription-button-subscriber-count-branded-horizontal yt-subscriber-count' を持つ span 要素は、特定の動画をアップロードしたチャンネルのチャンネル登録者数を抽出できる要素です。
- 特定のビデオに関連付けられたハッシュタグを見つけることは、他のデータ ポイントよりも少し複雑です。 まず、クラス「standalone-collection-badge-renderer-text」ですべてのスパンを抽出する必要があり、そこからクラス「yt-uix-sessionlink」ですべての a-tags を抽出する必要があります。 すべての a タグのテキストを配列に抽出することで、ハッシュタグのリストを作成できます。 この配列は、「HASH_TAGS」と呼ばれる特定のキーの下で結果の json に追加でき、最終的な結果の json で構造化された形式で情報を取得できます。
YouTube からスクレイピングできるデータ ポイントはどれですか?
上記のコードを使用すると、URL を知っている限り、YouTube 動画から特定のデータ ポイントをスクレイピングできます。 YouTube 動画ページでは必須フィールドではないため、特定の動画ではハッシュタグ フィールドのみが欠落している場合があります。 スクレイピングできるデータポイントは次のとおりです。
題名
最も重要なデータ ポイントは、最初に抽出するデータ ポイントです。 ビデオのタイトルには多くの情報が含まれており、最も重要です。これがなければ、他のすべてのデータ ポイントは意味をなさないでしょう。
チャンネル名
タイトルの直後にあるチャンネル名は、タイトルと作成者、つまりコンテンツの作成者を関連付けるために重要です。 YouTube では、多くの場合、複数の人が 1 つのチャンネルの動画に取り組んでいるため、動画は作成者ではなくチャンネル名で関連付けられています。
閲覧数
動画のリーチを理解する最も簡単な指標は、視聴回数を調べることです。 これは、YouTube 動画に関連する最も重要な指標でもあり、多くの点で、動画の作成者がどれだけの収益を得るかを決定します。
いいね
YouTube 動画の高評価は、動画の下にある高評価ボタンを実際にクリックするのに十分なほど、その動画を気に入った視聴者の割合です。
嫌い
上記のデータ ポイントと同様に、低評価の数によって、動画の低評価ボタンのクリック数が決まります。
購読数
高評価、低評価、再生回数は 1 つの YouTube 動画の人気度を表していますが、チャンネル登録者数は YouTube チャンネルの人気度をより正確に把握するのに役立ちます。 YouTube チャンネルについては、他の指標はありません。 チャンネル登録者数は唯一のデータ ポイントであり、それが高いほど、その YouTube チャンネルの人気が高いことを示します。
ハッシュタグ
ハッシュタグは、さまざまなメディアでコンテンツを検索できるようにする一般的な方法になっています。 Facebook の投稿であれ、Instagram の写真であれ、人々は今日、さまざまな種類のオンライン コンテンツでハッシュタグを使用して、さまざまな種類のコンテンツを関連付けることができます。 それが、今日「トレンドのハッシュタグ」が話題になっている理由です。
結論
与えられたコードは YouTube ビデオ ページから特定のデータ ポイントしか抽出できませんが、別の YouTube ページから HTML ページを調べると、同様の HTML 要素の下で発生するより多くのデータ ポイントを見つけるのに役立ちます。 Webスクレイピングには、Webサイト自体が変化し続けるため、厳格な規則はありません。 したがって、どのデータをどのようにスクレイピングするかを学ぶことは、さまざまな形式のデータを持つさまざまな Web ページをスクレイピングすることによる経験からのみ収集できるものです。
Web データの抽出についてサポートが必要ですか?
当社の Web スクレイピング サービスを使用して、ビジネス アプリケーション用の Web サイトからクリーンですぐに使用できるデータを取得します。
おっとっと! フォームが見つかりませんでした。
免責事項:このチュートリアルで提供されるコードは、学習のみを目的としています。 私たちは、それがどのように使用されるかについて責任を負わず、ソース コードのいかなる有害な使用についても責任を負いません。
