공식 API 없이 YouTube 데이터 스크래핑하는 방법 (쿼터 제한 없음)

발행: (2026년 3월 19일 PM 07:19 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

소개

YouTube Data API는 엄격한 할당량 제한을 두고 있습니다(하루 10 000 단위, 단일 검색당 100 단위). 이는 하루에 대략 100번의 검색 또는 10 000개의 댓글만 조회할 수 있음을 의미합니다. YouTube의 내부 Innertube API와 직접 페이지 파싱을 이용하면 이러한 제한 없이 동일한 데이터를 가져올 수 있습니다.

Innertube API를 사용한 동영상 데이터 접근

동영상 페이지 가져오기

// Fetch the video page HTML
const html = await fetch(`https://www.youtube.com/watch?v=${videoId}`)
  .then(r => r.text());

초기 데이터 추출

// Parse the ytInitialData JSON object from the page source
const ytData = JSON.parse(
  html.match(/ytInitialData\s*=\s*({.*?});/)[1]
);

댓글 섹션 찾기

// Navigate to the comments section within the parsed data
const contents = ytData.contents.twoColumnWatchNextResults
  .results.results.contents;

const commentSection = contents.find(
  c => c.itemSectionRenderer?.targetId === "comments-section"
);

스크레이퍼는 페이지네이션을 자동으로 처리하여 모든 댓글을 다음 정보와 함께 추출합니다:

  • 작성자 이름 및 채널
  • 댓글 텍스트
  • 좋아요 수
  • 답글 수
  • 게시 날짜
  • 작성자 인증 여부

전체 채널 데이터 가져오기

같은 방법으로 다음 정보를 얻을 수 있습니다:

  • 구독자 수
  • 전체 동영상 수
  • 채널 설명 및 외부 링크
  • 조회수와 함께 제공되는 최신 동영상 목록
  • 채널 생성 날짜

YouTube 검색 및 구조화된 결과 얻기

검색을 수행하면 스크레이퍼는 각 결과에 대해 구조화된 정보를 반환합니다:

  • 동영상 제목, URL 및 썸네일
  • 조회수 및 게시 날짜
  • 채널 이름
  • 재생 시간
  • 설명 스니펫

동영상 캡션 및 자막 추출

// Get caption tracks from the player response
const captionMatch = html.match(/"captionTracks":\[(.+?)\]/);
const tracks = JSON.parse(`[${captionMatch[1]}]`);

// Fetch the transcript XML for a specific track
const transcript = await fetch(tracks[0].baseUrl)
  .then(r => r.text());

특징

  • 다국어 지원
  • 타임스탬프 포함
  • 자동 생성 캡션 지원
  • YouTube Shorts 처리

실용적인 활용 사례

  • 콘텐츠 리서치 – 어떤 주제가 가장 많은 조회수를 얻는지 분석합니다.
  • 감성 분석 – 대규모 댓글을 처리해 시청자 반응을 파악합니다.
  • 경쟁사 모니터링 – 경쟁 채널의 성장 지표를 추적합니다.
  • AI 학습 데이터 – 동영상 전사본으로 데이터셋을 구축합니다.
  • 마케팅 분석 – 채널 전반의 참여도를 측정합니다.

도구

언급된 네 가지 도구 모두 Apify Store에서 제공되며, 소스 코드와 문서는 GitHub에 있습니다. 추가 리소스로는 60개 이상의 웹 스크래핑 도구, AI 에이전트를 위한 15개의 MCP 서버, 그리고 무료 시장 조사 보고서가 포함됩니다.

0 조회
Back to Blog

관련 글

더 보기 »