[자연어처리] 유튜브 API 를 사용해 영상 댓글 데이터 가져오기

2022. 4. 3. 18:54·캡스톤/자연어처리

1. 유튜브 API를 사용하기 위한 라이브러리 Import

 

from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from oauth2client.tools import argparser
import pandas as pd

 

 

2. 개인 API 정보 입력

 

DEVELOPER_KEY = "유튜브 API 키 값"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"

 

 

3. Build 객체 생성

 

youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,developerKey=DEVELOPER_KEY) # Build 객체 생성

 

 

4. 유튜브 검색 실행

 

 

search_response = youtube.search().list( # 유튜브 검색 실행
    q = "검색어",
    order = "relevance", # 정렬기준 : 관련성
    part = "snippet", # 필수 매개변수 : snippet (필수 매개변수 값에 포함할 수 있는 part 이름은 id 및 snippet이다.)
    maxResults = 50 # 결과개수 : 50개
    ).execute()

channel_id = search_response['items'][0]['id']['channelId'] # search_response 에서 가져온 첫 번째 결과의 채널 ID

 

 

5. 해당 유튜브 영상의 댓글 수집

 

reviews=[] # 댓글 리스트

comment = youtube.commentThreads().list( # 해당 유튜브 영상의 댓글 수집 실행
    videoId = "해당 영상의 ID",
    order = "relevance", # 댓글 정렬기준 : 관련성
    part = "snippet", # 필수 매개변수 : snippet (필수 매개변수 값에 포함할 수 있는 part 이름은 id 및 snippet이다.)
    maxResults = 100 # 댓글 결과개수 : 100개
).execute()

for i in comment['items']:
    reviews.append(i['snippet']['topLevelComment']['snippet']['textOriginal'])

 

 

6. 만약 댓글이 많아 페이지가 넘어갈 경우?

 

npt=comment['nextPageToken']

while 'nextPageToken' in comment.keys(): # 만약 페이지가 넘어갈 경우?

    comment = youtube.commentThreads().list(
        videoId = "해당 영상의 ID",
        order = "relevance",
        part = "snippet",
        maxResults = 100,
        pageToken=npt
    ).execute()
    for i in comment['items']:
        reviews.append(i['snippet']['topLevelComment']['snippet']['textOriginal'])  
    
    if 'nextPageToken' in comment.keys():
        npt=comment['nextPageToken']
    else:
        break
        
adf=pd.DataFrame(reviews,columns=['Comments'])

 

나는 검색어는 "엠빅뉴스", 영상 ID는 "CVgP1unQxVc" 으로 했다.

 

그 결과는 

 

 

댓글을 데이터프레임에 정상적으로 저장했다. 아 참고로 해당 영상은 월드컵 조 편성에 관한 영상이다.

 

 

그리고 데이터프레임에 담긴 댓글들을 보니까 중간에 '\n' 와 같은 줄바꿈 명령어가 댓글에 그대로 담긴 것을 볼 수 있다.. 이것을 없애줍시다.

 

 

7. 댓글 필터링

 

import json

 

일단 json 을 import 해주고,

 

def clean_html(x):
  #https://predictor-ver1.tistory.com/4
  x = re.sub("\n","",x)
  return x

 

필터링 함수를 선언한다.

 

adf['Comments'] = adf['Comments'].apply(lambda x: clean_html(x))

 

adf 데이터프레임에 있는 'Comments' 의 데이터 중 '\n' 을 모두 지운다.

 

 

그러면 아래와 같이 필터링이 된다.

 

 

'캡스톤 > 자연어처리' 카테고리의 다른 글

[자연어처리] 댓글 데이터 전처리 (2)  (0) 2022.04.05
[자연어처리] No module named 'konlpy' 에러  (0) 2022.04.05
[자연어처리] 댓글 데이터 전처리 (1)  (0) 2022.04.04
[자연어처리] 댓글 데이터 엑셀에 저장하기  (0) 2022.04.03
[자연어처리] 유튜브 댓글 크롤링 후 엑셀에 저장  (0) 2022.03.15
'캡스톤/자연어처리' 카테고리의 다른 글
  • [자연어처리] No module named 'konlpy' 에러
  • [자연어처리] 댓글 데이터 전처리 (1)
  • [자연어처리] 댓글 데이터 엑셀에 저장하기
  • [자연어처리] 유튜브 댓글 크롤링 후 엑셀에 저장
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[자연어처리] 유튜브 API 를 사용해 영상 댓글 데이터 가져오기
상단으로

티스토리툴바