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 |