유튜브를 활용하는 방법은 사람마다 제각각이다. 나는 주로 노래를 듣거나 드라마 10분 만에 보고 싶을 때 유튜브를 활용하지만 가끔은 뭔가를 배우기 위해서 유튜브에 들어가기도 한다.
특히 회사 입사 초반, 엑셀을 배우기 위해서 유튜브를 적극 활용했던 것 같다.
그때 발견한 엑셀의 신이 바로 유튜버 선생님 "오빠두엑셀"님... (처음엔 이름이 너무 이상해서 필요한 기능 하나만 들으려 헀지만...) 이 분의 영상을 하나 보고 나서는 날을 잡고 거의 모든 강의를 한 번씩 훑었다.
(엑셀을 공부하고 싶은 분.. 이 분 강의를 듣는걸 정말 추천한다..)
오빠두엑셀님의 유튜브 강의를 한 번씩 듣기로 결심한 나!
프로 J인 내가 가장 처음 한 행동은 강의를 듣는 것도 엑셀을 여는 것도 아닌 전체 동영상 목록을 파악하고 하루에 몇 개를 들을지 계획을 짜는 것이었다. 이 분을 발견하고 내가 가장 먼저 한 생각은 '얼마의 기간이 지나야 여기 있는 모든 영상의 엑셀 기능을 다 배울 수 있는가?'였다 ㅎㅎ
그때는 코딩은 커녕 엑셀도 서툴었던 때라 전체 동영상 목록을 엑셀에 하나하나 옮겨 적고 계획을 짰다. 천만다행으로 그때는 영상이 약 200개 정도로 충분히(?) 옮겨 적을 만했는데 오랜만에 다시 들어가니 그때 보다 영상이 약 두 배로 늘어나 옮겨 적기만으로는 다소 무리일 수 있다는 생각이 든다.
이처럼 유용한 정보를 다루고 있는 유튜버의 모든 영상을 다 보기로 결심했을 때, 계획을 잘 짤 수 있도록(?)
전체 동영상 목록을 크롤링해보자!
1. 필요한 라이브러리 불러오기
1 2 3 4 5 6 7 | import requests from selenium import webdriver import time from selenium.webdriver.common.by import By import pandas as pd from openpyxl import Workbook from bs4 import BeautifulSoup | cs |
2. 웹드라이브 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 | from bs4 import BeautifulSoup 1 #2. 웹드라이브 생성 2 driver = webdriver.Chrome('C:/Windows/chromedriver.exe')#웹드라이버 생성 3 url="https://www.youtube.com/@Oppadu/videos" 4 5 driver.get(url) 6 time.sleep(2) | cs |
url은 동영상 탭을 클릭한 채로 잡아 주자!
3. 데이터 프레임 만들기
재생목록을 엑셀로 받기 위한 기초작업. 칼럼을 미리 생성해두는 작업이다.
1 2 | #3. 데이터 프레임 만들어 놓기 table=pd.DataFrame(columns=['순서','제목']) | cs |
4. 페이지 끝까지 스크롤해서 모든 동영상 로드시켜 놓기
인스타그램과 마찬가지로 유튜브는 재생 목록이 스크롤 영역을 넘어서는 경우,
아래에 있는 영상을 바로 로드 시키지 않는다.
아래로 아래로 스크롤을 내리면 보여줄 영상을 로드시키는데,
전체 재생목록을 파일로 받기 위해서는 스크롤을 가장 아래로 내려 모든 영상을 로드 시킨 후 정보를 받아올 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #4. 페이지 끝까지 스크롤 last_height = driver.execute_script("return document.documentElement.scrollHeight")#마지막 시점의 창 높이 저장 while True: driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")#창 높이 까지 스크롤 time.sleep(2) driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight-50);")#한 번에 맨 마지막까지 스크롤되면 아래 리스트가 뜨지 않아서, 마지막을 찍고 조금 창을 올리는 방법으로 리스트가 로딩될 수 있게 함 time.sleep(2) new_height = driver.execute_script("return document.documentElement.scrollHeight")#스크롤이 된 후의 창 높이를 새로운 높이로 저장 if new_height == last_height:#새로운 높이가 이전 높이와 변하지 않았으면 스크롤 종료 break last_height = new_height ### 스크롤 완료 ### | cs |
5. BeautifulSoup으로 페이지 내의 모든 HTML 받아오기
1 2 3 4 5 | html = driver.page_source soup = BeautifulSoup(html,'html.parser') contents=driver.find_elements_by_css_selector('div#dismissible') | cs |
6.필요한 정보만 추출하기
1 2 3 | for i in range(len(contents)): title= soup.select('yt-formatted-string#video-title.style-scope.ytd-rich-grid-media')[i].text table.loc[i]=[i+1,title] | cs |
[필요한 정보를 확인하는 방법]
방법 1. 키보드 F12를 누르면 다음과 같은 화면이 나타나는데, 이 화면을 '개발자 도구'라고 한다.
해당 화면에서 이 웹사이트를 구성하는 모든 HTML코드를 확인할 수 있다.
내가 찾고자 하는 HTML 정보를 확인하기 위해서는
나타난 화면의 좌측 상단 마우스 표시 버튼을 클릭 후
아무 영상의 재생목록위에 커서를 올려두면,
이렇게 얻고자 하는 정보의 HTML코드를 확인 할 수 있다.
방법 2. F12대신 웹페이지 내 아무곳에서나 오른쪽 마우스 클릭> " 검사 " 를 클릭하면 개발자 도구 화면이 나타난다.
7. 엑셀로 저장!
1 | table.to_excel("유튜브 크롤링.xlsx") | cs |
짜잔!
'1. 코드 > 1.1 크롤링' 카테고리의 다른 글
인스타그램, 해시태그 검색 결과 크롤링하기 (3) | 2022.12.11 |
---|---|
네이버, 카페 검색 결과 크롤링 하기 (0) | 2022.12.11 |
댓글