Crawling
유튜브 영상 조회수 크롤러_youtube_crawl
km1n
2021. 12. 31. 17:39
유튜브에서 아이돌을 검색했을 때 나오는 영상들의 조회수 순서로 정렬 후 조회수 크롤링하기
-> 아이돌별 csv 파일로 저장됨
# 라이브러리 설치 필요
pip install selenium
pip install regex
pip install times
pip install tqdm
!pip install chromedriver_autoinstaller
import pandas as pd
from selenium import webdriver
from selenium.webdriver import ActionChains as AC
import chromedriver_autoinstaller
from tqdm import tqdm
from tqdm import tqdm_notebook
import re
from time import sleep
import time
# 워닝 무시
import warnings
warnings.filterwarnings('ignore')
keywords = ['방탄소년단','블랙핑크'] # 크롤링하고 싶은 아이돌 이름 추가
n = 10 # n : 조회수를 가져오고 싶은 영상 갯수
***참고
keywords = ['블랙핑크', '방탄소년단']
keyword = keywords[0]
keyword
이것처럼 리스트 만들고 하나씩 해도 됨
for keyword in keywords:
# 크롬창 띄우기
chrome_path = chromedriver_autoinstaller.install()
driver = webdriver.Chrome(chrome_path) # 윈도우 : chromedriver.exe
driver.get("https://www.youtube.com/results?search_query={}".format(keyword))
time.sleep(2)
# 필터 - 조회수 기준 정렬
driver.find_element_by_link_text('필터').click()
time.sleep(1)
driver.find_element_by_link_text('조회수').click()
time.sleep(1)
# 영상 제목 크롤링
overlays = "#video-title > yt-formatted-string"
titles = driver.find_elements_by_css_selector(overlays)
title_list = []
for i in range(n):
title = titles[i].text
title_list.append(title)
# 조회수 크롤링
overlays = "#metadata-line > span:nth-child(1)"
views = driver.find_elements_by_css_selector(overlays)
view_list = []
for i in range(n):
view = views[i].text.split(' ')[1]
if '만회' in view:
view = int(view.replace('만회','0000'))
elif '억회' in view:
view = view.replace('억회','')
if '.' in view:
view = int(view.replace('.',''))*10000000
else:
view = int(view)*100000000
view_list.append(view)
# 판다스로 만들기
df = pd.DataFrame({'title':title_list, 'view':view_list})
# csv파일로 저장
df.to_csv('youtube_view({}).csv'.format(keyword), encoding='utf-8-sig')