유튜브 채널 분석 자동화! 파이썬으로 영상 정보 자동 수집하기

유튜브 채널 분석 자동화! 파이썬으로 영상 정보 자동 수집하기 (완성 코드 공개)

파이썬으로 유튜브 영상 정보를 자동으로 수집하는 모습


"경쟁 채널의 인기 영상 제목과 조회수를 주기적으로 모니터링하고 싶다", "우리 채널 영상 목록을 엑셀로 정리해서 콘텐츠 현황을 파악하고 싶다", "특정 키워드로 검색되는 영상들의 조회수 추이를 추적하고 싶다"…

유튜브 스튜디오에서 데이터를 확인할 수 있지만 경쟁 채널을 비교하거나 이력을 누적 저장하기는 어렵습니다. 구글에서 제공하는 유튜브 데이터 API v3를 활용하면 파이썬으로 채널 정보, 영상 목록, 조회수, 좋아요 수, 댓글 수를 자동으로 수집할 수 있습니다. 하루 10,000 유닛까지 무료로 사용할 수 있습니다.


1단계: 유튜브 API 키 발급 (최초 1회만)

구글 클라우드 콘솔에서 API 키를 발급받아야 합니다. 아래 순서대로 진행하세요.

  1. console.cloud.google.com에 접속해 구글 계정으로 로그인합니다.
  2. 상단 "프로젝트 선택""새 프로젝트" → 프로젝트 이름 입력 후 만들기
  3. 왼쪽 메뉴 "API 및 서비스""라이브러리" 클릭
  4. 검색창에 "YouTube Data API v3" 검색 → 클릭 → "사용 설정"
  5. 왼쪽 메뉴 "사용자 인증 정보""사용자 인증 정보 만들기""API 키" 선택
  6. 생성된 API 키를 복사해 둡니다.
⚠️ API 사용량 주의: 유튜브 API는 하루 10,000 유닛 무료 한도가 있습니다. 영상 목록 조회는 100 유닛, 영상 상세 정보는 1 유닛 소비합니다. 대량 수집 시 한도를 초과할 수 있으니 주의하세요.

2단계: 준비물 설치

터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install google-api-python-client pandas openpyxl

google-api-python-client는 구글 API를 파이썬에서 쉽게 호출하는 공식 라이브러리입니다. pandasopenpyxl은 수집한 데이터를 엑셀로 저장하는 데 사용합니다.


3단계: 채널 ID 확인 방법

수집할 유튜브 채널의 채널 ID를 먼저 확인해야 합니다. 채널 페이지 주소에서 확인할 수 있습니다.

채널 주소가 youtube.com/channel/UC... 형태라면 UC... 부분이 채널 ID입니다. youtube.com/@채널이름 형태라면 채널 페이지에서 "소개" 탭 → 하단 "채널 공유" → 링크에서 채널 ID를 확인할 수 있습니다.


4단계: 완성 코드

아래 코드를 그대로 복사해서 메모장에 붙여넣고, youtube_collect.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.

from googleapiclient.discovery import build
import pandas as pd
from datetime import datetime
from pathlib import Path

# ① 설정
API_KEY    = "여기에_API_키_입력"                       # ← 1단계에서 발급받은 키
CHANNEL_ID = "여기에_채널_ID_입력"                      # ← 수집할 채널 ID
OUTPUT_PATH = r"C:\Users\내이름\Desktop\유튜브_영상목록.xlsx"  # ← 저장 경로
MAX_VIDEOS  = 50   # ← 최대 수집 영상 수 (최대 50개씩 페이지 처리)

# ② API 연결
youtube = build("youtube", "v3", developerKey=API_KEY)
print("  ✔ 유튜브 API 연결 완료")

# ③ 채널 기본 정보 수집
ch_res = youtube.channels().list(
    part="snippet,statistics",
    id=CHANNEL_ID
).execute()

ch_info    = ch_res["items"][0]
ch_name    = ch_info["snippet"]["title"]
ch_subs    = int(ch_info["statistics"].get("subscriberCount", 0))
ch_videos  = int(ch_info["statistics"].get("videoCount", 0))
ch_views   = int(ch_info["statistics"].get("viewCount", 0))
uploads_id = ch_info["snippet"].get("country", "")

print(f"  ✔ 채널명:    {ch_name}")
print(f"  ✔ 구독자:    {ch_subs:,}명")
print(f"  ✔ 총 영상:   {ch_videos:,}개")
print(f"  ✔ 총 조회수: {ch_views:,}회")

# ④ 업로드 재생목록 ID 가져오기
pl_res     = youtube.channels().list(
    part="contentDetails",
    id=CHANNEL_ID
).execute()
uploads_pl = pl_res["items"][0]["contentDetails"]["relatedPlaylists"]["uploads"]

# ⑤ 영상 목록 수집
video_ids = []
next_page = None

while len(video_ids) < MAX_VIDEOS:
    pl_items = youtube.playlistItems().list(
        part="contentDetails",
        playlistId=uploads_pl,
        maxResults=min(50, MAX_VIDEOS - len(video_ids)),
        pageToken=next_page
    ).execute()

    for item in pl_items["items"]:
        video_ids.append(item["contentDetails"]["videoId"])

    next_page = pl_items.get("nextPageToken")
    if not next_page:
        break

print(f"  ✔ 영상 ID 수집: {len(video_ids)}개")

# ⑥ 영상별 상세 정보 수집 (50개씩 묶어서 처리)
results = []
for i in range(0, len(video_ids), 50):
    chunk = video_ids[i:i+50]
    v_res = youtube.videos().list(
        part="snippet,statistics",
        id=",".join(chunk)
    ).execute()

    for item in v_res["items"]:
        snippet = item["snippet"]
        stats   = item.get("statistics", {})
        results.append({
            "수집일시":    datetime.now().strftime("%Y-%m-%d %H:%M"),
            "채널명":      ch_name,
            "영상제목":    snippet["title"],
            "게시일":      snippet["publishedAt"][:10],
            "조회수":      int(stats.get("viewCount",    0)),
            "좋아요수":    int(stats.get("likeCount",    0)),
            "댓글수":      int(stats.get("commentCount", 0)),
            "영상URL":     f"https://youtu.be/{item['id']}",
        })

# ⑦ 조회수 내림차순 정렬
df = pd.DataFrame(results).sort_values("조회수", ascending=False).reset_index(drop=True)

# ⑧ 엑셀 저장
output = Path(OUTPUT_PATH)
df.to_excel(output, index=False)

print(f"\n  ✔ 영상 {len(df)}개 수집 완료")
print(f"  ✔ 조회수 TOP 3:")
for _, row in df.head(3).iterrows():
    print(f"     {row['영상제목'][:30]}... ({row['조회수']:,}회)")

print(f"\n✅ 완료! 저장 → {OUTPUT_PATH}")

5단계: 실행 방법

  1. 코드 ① 설정의 API_KEY에 발급받은 키를 입력합니다.
  2. CHANNEL_ID에 수집할 채널 ID를 입력합니다.
  3. MAX_VIDEOS에 수집할 최대 영상 수를 입력합니다. 처음에는 10~20개로 테스트하는 것을 권장합니다.
  4. 터미널에서 아래 명령어로 실행합니다:
python youtube_collect.py

정상 실행 시 터미널에 이렇게 출력됩니다:

  ✔ 유튜브 API 연결 완료
  ✔ 채널명:    IT꿀팁 연구소
  ✔ 구독자:    12,500명
  ✔ 총 영상:   84개
  ✔ 총 조회수: 1,230,400회
  ✔ 영상 ID 수집: 50개

  ✔ 영상 50개 수집 완료
  ✔ 조회수 TOP 3:
     파이썬으로 엑셀 자동화하는 방법... (48,200회)
     카카오톡 자동 발송 완성 코드 공개... (32,100회)
     중복 파일 자동 삭제 꿀팁... (21,500회)

✅ 완료! 저장 → C:\Users\내이름\Desktop\유튜브_영상목록.xlsx

6단계: 자주 발생하는 오류와 해결법

오류 1: HttpError 403 — The caller does not have permission

API 키가 YouTube Data API v3에 대한 권한이 없는 경우입니다. 구글 클라우드 콘솔에서 YouTube Data API v3가 "사용 설정" 상태인지 다시 확인하세요.

오류 2: HttpError 400 — Channel not found

CHANNEL_ID가 잘못 입력된 경우입니다. 채널 ID는 반드시 UC로 시작하는 24자리 문자열이어야 합니다. @채널이름 형태는 채널 ID가 아닙니다.

오류 3: quotaExceeded — 일일 한도 초과

하루 10,000 유닛 무료 한도를 초과한 경우입니다. 다음 날 자정(태평양 표준시 기준)에 한도가 초기화됩니다. MAX_VIDEOS 값을 줄이거나 수집 주기를 늘려 사용량을 조절하세요.


응용: 여러 채널을 비교 수집하고 싶다면

경쟁 채널 여러 개를 동시에 수집해 비교 분석할 수 있습니다. 코드 ① 설정의 CHANNEL_ID를 리스트로 교체하세요.

CHANNEL_IDS = [
    "UC채널ID_1",
    "UC채널ID_2",
    "UC채널ID_3",
]

all_results = []
for channel_id in CHANNEL_IDS:
    CHANNEL_ID = channel_id
    # ... 기존 수집 코드 실행 후 all_results에 추가
    all_results.extend(results)

df = pd.DataFrame(all_results).sort_values(["채널명", "조회수"], ascending=[True, False])
💡 이전 게시글과 결합하면: 차트 자동 저장 편과 결합하면 채널별 조회수 비교 차트를 자동으로 생성할 수 있고, 텔레그램 자동 발송 편과 결합하면 주간 채널 현황 리포트를 자동으로 받는 것도 가능합니다.

핵심 요약

  • 준비물: 구글 클라우드 YouTube Data API v3 키 발급(최초 1회) + pip install google-api-python-client pandas openpyxl
  • 설정: API_KEY, CHANNEL_ID, OUTPUT_PATH, MAX_VIDEOS 수정
  • 실행: 터미널에서 python youtube_collect.py 입력
  • 결과: 영상 제목·게시일·조회수·좋아요·댓글 수가 조회수 내림차순으로 엑셀에 저장

이 코드를 응용하면 특정 키워드로 영상을 검색하거나, 영상 댓글을 수집해 감성 분석하는 것도 가능합니다.

이 블로그의 인기 게시물

느려진 구글 크롬 속도 2배 빨라지는 3가지 설정 방법 (2026년 최신 가이드)

카카오톡 용량 줄이기! 대화방 파일 삭제로 스마트폰 용량 확보법 (1분 해결)

업무 속도 3배 빨라지는 윈도우 기본 캡처 도구 단축키 및 200% 활용 꿀팁