크롤링

크롤링_유튜브 데이터 수집

asu2880 2022. 6. 30. 15:13

from selenium import webdriver as wb
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup as bs

import time
import pandas as pd
# f-string
keyword = '강아지'
yt_url = f'https://www.youtube.com/results?search_query={keyword}'

driver = wb.Chrome()
driver.get(yt_url)
# selenium을 이용해서 HTML 문서를 변환한 후에는 반드시 브라우저를 종료해야 한다.
html = bs(driver.page_source, 'lxml')
driver.close()
# selenium을 이용해서 HTML 문서를 변환한 후에는 반드시 브라우저를 종료해야 한다.
html = bs(driver.page_source, 'lxml')
driver.close()
yt_content = html.select_one('a#video-title')
title = yt_content.get('title')
content_url = 'https://www.youtube.com' + yt_content.get('href')
start_pos = yt_content.get('aria-label').find('조회수') + 4

# rfind() : 문자열 마지막에서부터 문자의 위치를 찾는 함수
end_pos = yt_content.get('aria-label').rfind('회')

# 5,663을 출력해보기(슬라이싱 활용)
reviews = yt_content.get('aria-label')[start_pos : end_pos]

 

for content in html.select('a#video-title'):
    title = content.get('title')
    content_url = 'https://www.youtube.com' + content.get('href')
    
    start_pos = content.get('aria-label').find('조회수') + 4
    end_pos = content.get('aria-label').rfind('회')
    
    reviews = content.get('aria-label')[start_pos : end_pos]
    
    print('영상제목: ', title)
    print('영상주소',content_url)
    print('조회수: ',reviews)

 

body = driver.find_element(By.TAG_NAME, value='body')

# 스크롤 key 값 활용: PageDown, PageUp, 방향키(위/아래), Space
# body.send_keys(Keys.PAGE_DOWN)

for i in range(5):
    body.send_keys(Keys.ARROW_DOWN)
    time.sleep(1.5)

 

# f-string
keyword = '강아지'
yt_url = f'https://www.youtube.com/results?search_query={keyword}'
driver = wb.Chrome()
driver.get(yt_url)

# 브라우저 로드가 완료되기 위한 시간
time.sleep(2)

body = driver.find_element(By.TAG_NAME, value='body')

# 스크롤 key값 활용: PageDown, PageUp, 방향기(위/아래)
for i in range(5):
    body.send_keys(Keys.END)
    time.sleep(1.5)
    
# selenium을 이용해서 HTML문서를 변환한 후에는 반드시 브라우저를 종료해야 한다!
html = bs(driver.page_source, 'lxml')
driver.close()

titleList = []
contentUrlList = []
reviewsList = []

for content in html.select('a#video-title'):
    title = content.get('title')
    content_url = 'https://www.youtube.com'+content.get('href')
    
    start_pos = content.get('aria-label').find('조회수')+4
    end_pos = content.get('aria-label').rfind('회')
    
    reviews = content.get('aria-label')[start_pos:end_pos]
    
    titleList.append(title)
    contentUrlList.append(content_url)
    reviewsList.append(reviews)
    
#     print('영상제목:', title)
#     print('영상주소:', content_url)
#     print('조회수:', reviews)
#     print('-'*30)
# 유튜브 내용을 저장할 딕셔너리 생성
yt_dic = {
    '영상제목' : titleList,
    '영상주소' : contentUrlList,
    '조회수' : reviewsList
}

# 데이터 프레임 생성
yt_df = pd.DataFrame(yt_dic)
yt_df

 

# 1. 특정 유튜브 페이지를 driver 객체로 실행
driver = wb.Chrome()
driver.get('https://www.youtube.com/watch?v=d1IEHdKpMvI')

# 2. 페이지 스크롤(횟수 5~10 회/ 딜레이 1~2초)
body = driver.find_element(By.TAG_NAME, value='body')
for i in range(5):
    body.send_keys(Keys.END)
    
    # 정해진 횟수만큼 반복되어 스크롤이 내려가지 않을 수 있기 때문에 반드시 sleep() 설정
    time.sleep(1.5)
    
# 3. 현재 HTML 문서 내용을 파이썬 객체로 변환(bs 활용)
content_html = html = bs(driver.page_source, 'lxml')
driver.close()

# 4. 댓글 내용을 가진 HTML 요소 객체를 select()로 수집
comments = content_html.select('div#content > yt-formatted-string')

for comment in comments:
    print(comment.text)
728x90
반응형

'크롤링' 카테고리의 다른 글

크롤링_쇼핑몰 상품 데이터 수집  (4) 2022.07.01
크롤링_이미지 수집  (0) 2022.06.30
크롤링_Selenium  (0) 2022.06.30
크롤링_워드클라우드 그리기  (0) 2022.06.30
크롤링_네이버 영화 리뷰 수집(실습)  (0) 2022.06.28