YouTube 동영상 목록 크롤링
이번 포스팅에서는 유튜브 목록을 크롤링하는 방법을 알아봅니다
YouTube 동영상 목록의 특징
유튜브의 특징은 스크롤바를 끝까지 내리면 밑 부분이 로딩이 된다.
처음부터 모든것을 굳이 가지고 올 필요가 없기 때문에 먼저 일부만 가지고 오고 나중에 사용자가 요청하면 그때 읽어오는 원리인 것이다.
물론 끝이 없는건아니다. 끝은 있다.
따라서 YouTube 동영상목록을 가지고 오려면 먼저 스크롤을 끝까지 내린 다음에 가지고 와야한다.
이 스크롤을 내리는데 Selenium 을 쓴다.
Selenium을 이용한 크롤링
- execute_script('javascript')
- 웹에서 자바스크립트 실행
- 자바스크립트 코드가 결과를 만들어냄
- javascript method
- window.scrollTo(width, height):스크롤바 이동
- document.documentElement.scrollHeigh : document 높이
#크롬 드라이버 실행
from selenium.webdriver import Chrome
url = 'https://www.youtube.com/'
driver = Chrome()
driver.get(url)
#웹의 높이 반환
scroll_pane_height = driver.execute_script('return document.documentElement.scrollHeight')
스크롤바 내리기 (무한 스크롤)
while True:
# 스크롤바를 스크롤패인 높이만큼 이동
driver.execute_script('window.scrollTo(0,document.documentElement.scrollHeight)')
# 밑에 붙일 내용을 요청해서 화면을 만들때까지 시간차를 둔다.
time.sleep(1)
new_scroll_pane_height = driver.execute_script('return document.documentElement.scrollHeight')
print(scroll_pane_height,new_scroll_pane_height)
if scroll_pane_height == new_scroll_pane_height:
break
scroll_pane_height = new_scroll_pane_height
목록 제목과 동영상링크 가져오기
from bs4 import BeautifulSoup
from urllib import parse
soup = BeautifulSoup(driver.page_source)
a_list = soup.select('div#contents div#content a#video-title-link')
result = []
for a_tag in a_list:
link = parse.urljoin(url,a_tag.get('href'))
title = a_tag.text
result.append([link,title])
728x90
반응형
'Data Engineering > Crawling' 카테고리의 다른 글
[Crawling] TripAdvisor 댓글 크롤링 (0) | 2020.08.05 |
---|---|
[Crawling] Headless 브라우저 (0) | 2020.08.05 |
[Crawling] Daum, Naver 로그인 후 메일 목록 크롤링 (0) | 2020.08.05 |
[Crawling] Selenium (0) | 2020.08.05 |
[Crawling] 쿠팡(Coupang)검색결과 크롤링 (3) | 2020.08.05 |