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 |