YouTube 동영상 목록 크롤링
이번 포스팅에서는 유튜브 목록을 크롤링하는 방법을 알아봅니다
YouTube 동영상 목록의 특징
유튜브의 특징은 스크롤바를 끝까지 내리면 밑 부분이 로딩이 된다.
처음부터 모든것을 굳이 가지고 올 필요가 없기 때문에 먼저 일부만 가지고 오고 나중에 사용자가 요청하면 그때 읽어오는 원리인 것이다.
![[Crawling] YouTube 동영상 목록 크롤링 0](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
![[Crawling] YouTube 동영상 목록 크롤링 1](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
물론 끝이 없는건아니다. 끝은 있다.
![[Crawling] YouTube 동영상 목록 크롤링 2](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
따라서 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 |