- 준비물
Youtube API Key (free) | 취득방법은 아래 사이트의 중간부분 참조 https://blog.hubspot.com/website/how-to-get-youtube-api-key |
모듈 인스톨 | pip3 install pandas pip3 install google-api-python-client |
분석할 채널 ID | Youtube채널 사이트에 들어가서 페이지 소스 보기 channelId 로 검색 예) 노빠꾸탁재훈 https://www.youtube.com/@nobacktak channelId : UCSSkHIU1-nL_FeCjeZ_Xtvg |
Python Code
from googleapiclient.discovery import build
import os
import pandas as pd
API_KEY = "본인 Youtube API KEY"
# build
youtube = build('youtube', 'v3', developerKey=API_KEY)
# 분석할 채널 아이디 (노빠꾸탁재훈)
CHANNEL_ID = "UCSSkHIU1-nL_FeCjeZ_Xtvg"
# 채널의 통계 취득 함수 (나중에 비디오 리스트를 취득하기 위한 upload id 가 포함)
def get_channel_stats(youtube, channel_id):
request = youtube.channels().list(
part="snippet,contentDetails,statistics",
id=channel_id
)
response = request.execute()
return response['items']
# upload id 에 포함되어 있는 모드 비디오 리스트를 취득
# 부하를 줄이기 위해 한번에 50개씩 가져옴
def get_video_list(youtube, upload_id):
video_list = []
request = youtube.playlistItems().list(
part="snippet,contentDetails",
playlistId=upload_id,
maxResults=50
)
next_page = True
while next_page:
response = request.execute()
data = response['items']
for video in data:
video_id = video['contentDetails']['videoId']
if video_id not in video_list:
video_list.append(video_id)
# 아직 페이지가 남았나?
if 'nextPageToken' in response.keys():
next_page = True
request = youtube.playlistItems().list(
part="snippet,contentDetails",
playlistId=upload_id,
pageToken=response['nextPageToken'],
maxResults=50
)
else:
next_page = False
return video_list
# 각 비디오들의 프로퍼티를 취득
# 부하를 줄이기 위해 50 비디오씩 취급
# 나중에 Padas에서 읽어들이기 위해 python의 dictionary 형식으로 조합
def get_video_details(youtube, video_list):
stats_list=[]
for i in range(0, len(video_list), 50):
request= youtube.videos().list(
part="snippet,contentDetails,statistics",
id=video_list[i:i+50]
)
data = request.execute()
for video in data['items']:
title=video['snippet']['title']
published=video['snippet']['publishedAt']
description=video['snippet']['description']
# 어떤 비디오에서는 tag 정보가 없는 경우가 있기 때문에 에러 방지를 위해 체크
if 'tags' in video['snippet']:
tag_count= len(video['snippet']['tags'])
else:
tag_count = 0
view_count=video['statistics'].get('viewCount',0)
like_count=video['statistics'].get('likeCount',0)
dislike_count=video['statistics'].get('dislikeCount',0)
comment_count=video['statistics'].get('commentCount',0)
stats_dict=dict(title=title, description=description, published=published, tag_count=tag_count, view_count=view_count, like_count=like_count, dislike_count=dislike_count, comment_count=comment_count)
stats_list.append(stats_dict)
return stats_list
# 채널정보
channel_stats = get_channel_stats(youtube, CHANNEL_ID)
# upload id : 비디오들이 id 와 연결되어 있슴
upload_id = channel_stats[0]['contentDetails']['relatedPlaylists']['uploads']
# 비디오 리스트
video_list = get_video_list(youtube, upload_id)
# 각 비디오별 프로퍼티(dictionary)
video_data = get_video_details(youtube, video_list)
# padas 로 변환
df=pd.DataFrame(video_data)
# 스트링형(object)을 넘버형으로 변환
df = df.astype({'view_count':'int', 'like_count':'int', 'dislike_count':'int', 'comment_count':'int'})
# 혹은 개별처리 가능
# df['view_count'] = df['view_count'].astype('int')
# 혹은 to_numeric 메서드를 이용 가능
# df["view_count"] = pd.to_numeric(df["view_count"])
# 새로운 칼럼(리액션= 카운트의 총합)을 생성
df["reactions"] = df["like_count"] + df["dislike_count"] + df["comment_count"] + df["comment_count"]
# csv 로 저장
df.to_csv("노빠꾸탁재훈.csv")
다운로드 노빠꾸탁재훈.csv
'data science > pandas' 카테고리의 다른 글
(pandas) basic (0) | 2024.10.23 |
---|---|
(pandas) Youtube 노빠꾸탁재훈 채널 분석 (0) | 2023.11.18 |