데이터분석, 인공지능

[데이터분석] 유튜브 데이터 분석하기 -1

RuBPCase 2022. 2. 1. 13:35
728x90

Intro

내가 과거 어떤 기업체에서 현장실습을 하면서 유튜브의 정보를 끌어오는 업무를 받은 적이 있었다.
해당 팀장님께 여쭤보면서 API를 활용하는 방법을 차근차근 배웠는데, 처음 사용하다 보니 그때 당시엔 다소 복잡하게 느껴졌다.
따라서 '유튜브 데이터 분석하기' 시리즈에선 여기서는 유튜브의 데이터를 끌어오는 방법을 기술하고 이를 활용하는 과정을 기술하려 한다.

나도 그때그때 맞춰가면서 포스팅할 생각이라 중간중간 방향이 바뀔 수 있다.

일단 현재 게시물에서 다룰 주제는 다음과 같다.

  • 유튜브 API 등록하기
  • 구글 Colab 활용하기
  • API 요청해서 정보 받기 (간단)

기본 베이스

당연하지만 구글 계정이 필요하다.
만일 학교 연동 계정이라면 일부 기능이 제한될 수 있으니 어떤 계정을 쓸 지는 알아서 판단하면 된다.

플랫폼을 어떻게 쓰는지, 가입을 어찌 하는지 등까지 적기엔 너무 자잘하고 양이 많아질 것 같다.
따라서 이런 자세한 부분은 생략하고, 큰 관점에서 주 과정만 서술하려 한다.
물론 코드 관련해서는 조금 자세히 기술할 생각이다.

구글 클라우드 플랫폼 사용

먼저 구글 클라우드에 접속하게 되면 위와 같은 화면을 볼 수 있다.
좌측 상단의 '프로젝트 선택'을 눌러서 선택 화면으로 들어가자.

그러면 위와 같은 화면을 볼 수 있다.
여기서 우측 상단의 '새 프로젝트'를 클릭하자.

그러면 위 사진과 같이 새 프로젝트를 생성하는 창이 뜰 것이다.
프로젝트 이름에 원하는 이름을 지어주자.
조직이나 위치는 자기 계정하에 적절히 선정하면 된다.
지금 난 비즈니스 계정을 쓰다보니 해당 부분을 가렸다.

이후 만들기 버튼을 눌러주면 끝이다.

위 화면과 같이 프로젝트가 뜨면 정상적으로 플랫폼 생성이 완료된 것이다.
여기서 API를 추가하는 형태로 앞으로 서비스를 관리할 예정이다.
필요에 따라선 결제를 하거나 할당량을 조절하는 등의 관리도 수행할 수 있다.

유튜브 API 발급 받기

앞선 화면에서 시작해서 이제 유트브 API를 해당 프로젝트에 추가해보도록 하자.

먼저 화면을 아래로 내리면 위 그림과 같이 '시작하기'항목이 뜰 것이다.
여기서 'API 탐색 및 사용 설정'을 클릭해주자.

그러면 'API 및 서비스'라는 화면으로 들어가진다.
여기서 'API 및 서비스 사용 설정'을 눌러주자.

이후 뜨는 검색창에서 'youtube data api v3'를 검색해주자.
그러면 위와 같이 하나가 뜰 것인데, 이를 클릭하자.

그러면 위와 같은 페이지로 이동한다.
역시 '사용'을 눌러주면 된다.

그러면 위 항목의 'YouTube Data API v3'관련 화면으로 넘어간다.
(혹시라도 안 넘어가면 알아서 찾아가면 된다.)
좌측의 '사용자 인증 정보'를 눌러서 위와 같은 페이지로 이동한다.
이후 '사용자 인증 정보 만들기'를 눌러서 API 키를 발급 받자.

이제 API 키를 얻게 됐다!
이 키를 복사해서 어디 나만 알 수 있는 곳에 저장해놓으면 된다.
향후 이 키를 써서 유튜브의 정보를 얻어올 예정이다.

구글 Colab 활용하기

이제 구글 Colab을 사용하는 방법을 간략히 기술하려 한다.
별도의 IDE 프로그램에서 수행하는 방법도 있겠지만, 여기선 작업의 편의를 위해 Colab을 쓰려 한다.
혹시 필요한 사람은 Jupyter notebook 등을 써도 무관하다.

맨 처음 구글 Colab환경을 들어가면 위와 같은 페이지가 나온다.
왜 영어로 되어있는지 물어보면 크흠...
'파일'로 들어가서 '새 노트북 생성'을 눌러준다.
(살짝 이름이 다를 수 있다.)

그러면 위와 같은 빈 페이지가 하나 생성된다.
Untitled 문구를 눌러서 원하는 제목으로 바꿔주자.
나는 위와 같이 그냥 '유튜브크롤러'라고 제목을 지었다.

Colab에서 코드를 어떻게 적고 텍스트를 어떻게 기술할지는 따로 적지 않겠다.
이건 관련 강좌를 보면 금방 배울 수 있기도 하고, 이것까지 적기엔 너무 양이 많아질 것 같기도 해서다.

아무튼 위와 같이 환경을 테스트해봤다.
파이썬하듯 Hello world!가 정상적으로 뜬 것을 알 수 있다.

정보 끌어오기

간단하게 특정 키워드로 검색했을 때의 영상 정보들을 알아내보자.

from urllib.parse import quote  # ascii 문자열을 URL형태로 인코딩!
import urllib.request  # API request 수행.
import json  # json 구조 다루기 용

APIKEY = '아까 발급받은 API KEY를 붙여 넣어주세요'  # 아까 발급 받은 API KEY 복붙!
Keyword = quote('Fennec fox')  # 검색하고 싶은 키워드

url = f"https://www.googleapis.com/youtube/v3/search?type=video&maxResults=50&part=id,snippet&fields=nextPageToken,pageInfo(totalResults),items(id(videoId),snippet(publishedAt,title,description))&q={Keyword}&key={APIKEY}"

url_data = urllib.request.urlopen(url).read()
json_data = json.loads(url_data)

위 코드를 그대로 복붙한 다음 APIKEY에 아까 발급받은 Key값을 붙여 넣어주자.
필요한 사람은 quote메소드 내의 값을 다른 검색어로 바꿔도 좋다. (사막여우 귀여워)
이후 실행을 하게 되면 json_data라는 변수에 JSON구조로 데이터가 저장된다.
이제 json_data를 그냥 입력하면 다음의 형태로 값이 뜰 것이다.

....너무 많다. 50개나 요청을 했으니..

그래서 얻어낸 정보 중에서 주요 정보를 간추려서 위 그림과 같이 얻어냈다.
간략하게 각각의 정보를 설명하려 한다.

nextPageToken 항목은 일단 여기선 패스하겠다.
나중에 크롤러를 짜는 과정에서 조금 더 자세히 설명하려 한다.
간단하게 적자면 다음 페이지부터 검색 시작을 위한 플래그라 생각하면 되겠다.

pageInfo에선 현재 검색 결과에 따른 정보가 나와있다.
요청한 query문에선 totalResults만 요청했기에, 전체 검색된 영상의 수 720805개가 나왔음을 알 수 있다.

items에는 검색된 상위 50개 이하의 영상의 정보가 담겨져있다.
배열처럼 접근해서 각각의 정보를 확인할 수 있다.

id에 있는 videoId는 유튜브 링크에서 'www.유튜브.컴/watch?v=여기이부분'을 의미한다.
(링크가 자동으로 인식되어서 저렇게 한글로 쳤다.)
snippet엔 세부 정보가 저장되어있는데, 대충 해석하면 각각 뭘 의미하는지는 알 것이다.
위 정보를 필요하면 DataFrame의 형태로 저장해서 사용할 수 있겠다.

코드 설명

아까 정보 끌어오기 파트에 있던 코드를 부분부분 설명하려 한다.
어느정도 배경지식을 갖추고 있다면 이 부분은 넘어가도 된다.

from urllib.parse import quote  
import urllib.request  
import json 

맨 처음 주요 라이브러리를 불러오는 파트이다.
ascii값을 URL형태에서 쓰는 구조로 바꾸기 위해 urllib.parsequote 메소드를 불러왔다.
그 다음에 API 요청을 위한 urllib.request를 넣었다.
마지막으로 json구조를 다루기 위한 모듈도 추가했다.

APIKEY = '~~~' 
Keyword = quote('검색어') 

여기선 APIKEYKeyword라는 변수를 선언했다.
APIKEY는 앞서 발급받은 key값이며, Keyword는 검색하려는 문구를 의미힌다.

url = f"https://www.googleapis.com/youtube/v3/search?type=video&maxResults=50&part=id,snippet&fields=nextPageToken,pageInfo(totalResults),items(id(videoId),snippet(publishedAt,title,description))&q={Keyword}&key={APIKEY}"

url 변수에는 유튜브 서버로 정보 요청을 위한 링크가 있다보면 된다.
각각의 세부 내용은 다음 게시물에서 다룰 예정이다.
왜냐하면 레퍼런스를 읽어가며 위와 같은 질의부분을 붙여나가야 하기 때문이다.

간단하게 압축 요약하면, 핵심 부분은 https://www.googleapis.com/youtube/v3/search 이다.
나머지 ? 이후로는 전부 질의파트라 보면 된다.
가령 &q={Keyword}에선 키워드로 Keyword의 값을 쓴다라는 의미라 보면 된다.

url_data = urllib.request.urlopen(url).read()
json_data = json.loads(url_data)

이후 urlopen(), read()를 이용해서 url의 정보를 읽어낸다.
최종적으로 읽어낸 정보를 json구조로 바꿔서 json_data에 저장했다.
json 구조가 무엇인지 모른다면 간단하게 구글링을 해서 알아보길 바란다.
비유하자면 파이썬의 딕셔너리 같은 느낌이다.

마무리

일단 이렇게 첫 번째 장을 마치려 한다.
내용이 많기는 한데, 그래도 이렇게 기술하면 다른 개발자분들도 참고할 수 있기에 나름대로 이것저것 적어놓았다.

다음 챕터에선 정보를 크롤링하는 함수 or 메소드를 작성할 예정이다.
이때, 포인트(API 할당량)를 고려하여 기능을 구현할 예정이다.
또한 동시에 레퍼런스도 읽어내는 방법도 아마 기술할 생각이다.

728x90