유튜브는 영상 하나의 페이지 등을 크롤링 할때는 requests와 BeautifulSoup만으로도 가능하지만

검색 내용 등의 동적페이지부분을 크롤링 할때 문제가 생긴다.

한화면에 내용이 다 보이지 않고 스크롤을 내리며 로딩을 해야 나머지 결과들이 나오기 때문

 

Selenium 패키지가 이런 동작을 대신할 수 있다.

Selenium은 웹 애플리케이션 테스트를 위한 포터블 프레임워크로 프로그래밍 언어들에서 테스트를 작성하기 위한 테스트 도메인 특화 언어(Selenese)를 제공한다. 이 테스트들은 현대의 대부분의 웹 브라우저에서 수행이 가능하다.

 

쉽게 말하자면 브라우저를 직접 동작시켜 실제 사용자 동작을 직접 시뮬레이션하는 기능을 가지고 있다.

 

그래서 우리가 크롤링할 때 대신 스크롤을 내려주어 더 많은 검색내용을 볼 수 있게 해준다.

 

Selenium을 사용하려면 크롬드라이버도 설치해줘야한다.

 

 


설치

 

1. 자신의 크롬 버전 확인

케밥메뉴(세로 3점 더보니 메뉴를 지칭) > 설정 > Chrome 정보 에서 버전을 확인

+ UI 아이콘 호칭

점 3개가 가로로 나란히 있는 아이콘 : 미트볼메뉴

점 3개가 세로로 나란히 있는 아이콘 : 케밥메뉴 

선 3개가 세로로 나란히 있는 아이콘 : 햄버거 메뉴

 


2.  Selenium 홈페이지에서 웹드라이버 다운받기

https://www.selenium.dev/

 

Selenium

Selenium automates browsers. That's it!

www.selenium.dev

내 크롬버전보다 아래긴 한데 가장 최근 버젼이라 다운

윈도우 유저 이므로 윈도우 버젼 선택해서 다운

 


3. 압축 풀어서 실행해 실행 확인

 


4. Selenium 설치

설정 > 프로젝트: 프로젝트명 > Python 인터프리터 > + > selenium 검색  > 선택 > 패키지 설치

 

 


5.  코드를 통해 실행해보기

크롬드라이버 파일 위치는 자신이 크롬드라이버를 위치시킨 위치에 맞춰 변경

from selenium import webdriver
browser = webdriver.Chrome(executable_path="../setting/chromedriver.exe")
url = "https://www.naver.com"
browser.get(url)

실행했을때 이 주소의 화면이 뜬다면 성공

 

다만, 이런 경고가 떴다. 해당 경고는 내 크롬버전이 크롬드라이버 보다 높을 경우에 뜬다고 하는데 실행은 된다.

매번 수동으로 버젼을 맞춰주는게 싫다면 아래방법을 참조하자.

아래는 크롬드라이버를 이용하는 것이 아닌 자신이 사용하는 크롬을 사용하는 방법

https://velog.io/@sangyeon217/deprecation-warning-executablepath-has-been-deprecated

 

DeprecationWarning: executable_path has been deprecated 해결하기

DeprecationWarning: executable_path has been deprecated 해결 방법에 대한 포스팅 입니다.

velog.io

 

 

 


 

셀레늄을 이용한 크롤링 구현

 

임포트 내용

import time
from selenium import webdriver
from selenium.common.exceptions import WebDriverException as WDE
from selenium.webdriver.common import keys
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import requests
from bs4 import BeautifulSoup

 

기초세팅

#----- 기본세팅 및 홈페이지 접속
browser = webdriver.Chrome(executable_path="../setting/chromedriver.exe")
url = "https://youtube.com" # 접속 url
test_keyword = '자바' # 검색할 키워드
finish_line = 1000 # 스크롤 내릴 기준
browser.get(url)
delay = 2 # 페이지 로딩을 위해
time.sleep(delay)

 

키워드 세팅

#----- 키워드 검색
search = browser.find_element(By.NAME, "search_query") # 이 아이디에 해당하는 걸 찾아
search.send_keys(test_keyword) # 키워드 넣고
search.send_keys(keys.Keys.ENTER) # 엔터키 쳐주기

present_url = browser.current_url
browser.get(present_url) # 작업창을 기본 유튭에서 검색한 창으로 교체

 

스크롤 작업

 #----- 스크롤작업 시작
last_page_height = browser.execute_script("return document.documentElement.scrollHeight")

while True:
    # 스크롤 내리기
    browser.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
    time.sleep(delay)  # 작업 중간에 1이상으로 간격을 줘야 데이터 취득가능(스크롤을 내릴 때의 데이터 로딩 시간 때문)
    # 현재까지 내린 스크롤 위치 값
    new_page_height = browser.execute_script("return document.documentElement.scrollHeight")

    # 과거의 길이와 현재 위치 비교하기
    if new_page_height > finish_line: # 현재 위치값이 제한 길이 보다 크다면
        break # 반복 종료
    else: # 아니라면
        last_page_height = new_page_height # 지금 위치를 라스트 위치에 대입
        
 #----- 스크롤작업 종료 (뒤에서 더 쓸일 없음)

 

유튜브 제목과 video ID 추출

html = browser.page_source # 로드한 페이지의 소스를 가져옴
time.sleep(delay)

soup = BeautifulSoup(html, 'html.parser')
result = soup.select("#contents > ytd-video-renderer")

for one in result :
    title = one.select_one('#video-title')['title']
    href = one.select_one('#video-title')['href'].replace("/watch?v=","")
    print(title)
    print(href)

 

결과

 

 

? 셀레늄 실행시 브라우저가 실행되는데 이부분은 어쩔수 없는 부분인건지 

찾아보니 크롬창 없이 하는 옵션이 있음

https://minimin2.tistory.com/118

 

[Python] Selenium을 크롬 창 없이 실행하기(background에서 실행하기)

[Python] Selenium을 크롬 창 없이 실행하기(background에서 실행하기) 개요 지난 게시물에서 selenium을 사용하는 방법을 알아보았습니다. 보통 selenium으로 크롤링을 하거나 인터넷으로 하는 단순 반복 작

minimin2.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 


+ 이 포스팅 작성시 참고한 사이트

Selenium 공식 문서 : 

https://selenium-python.readthedocs.io/index.html

 

Selenium with Python — Selenium Python Bindings 2 documentation

Note This is not an official documentation. If you would like to contribute to this documentation, you can fork this project in GitHub and send pull requests. You can also send your feedback to my email: baiju.m.mail AT gmail DOT com. So far 50+ community

selenium-python.readthedocs.io

크롬 드라이버 설치 방법

https://somjang.tistory.com/entry/WindowsWindows10%EC%97%90-Selenium%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

 

[Windows]Windows10에 Selenium설치하기(20.2.13 업데이트)

1. 구글 크롬 최신으로 업데이트하기 먼저 크롬의 맨 우측 상단의 세 개의 점을 클릭하여 크롬의 설정페이지로 들어갑니다. 왼쪽 메뉴에서 Chrome 정보를 클릭하여 업데이트를 실시합니다. 다시시

somjang.tistory.com

Selenium 코드

https://data-ssung.tistory.com/129

 

[데이터 수집] selenium 유튜브 검색 결과 스크래핑

유튜브 검색 결과 스크래핑 이 글은 유튜브 검색 결과를 데이터로 수집하는 글입니다. 유튜브 검색 결과에서 컨텐츠 제목, url 등의 가져와서 csv 파일로 저장해보았습니다. 열심히 배우고 있는

data-ssung.tistory.com

 

+ Recent posts