<jupyter_start><jupyter_text><jupyter_code>!pip install chromedriver-autoinstaller
!pip install selenium
# 크롬 브라우저 버전에 따라 스스로 크롬드라이버를 다운로드해서 가져오기
# 라이브러리 불러오기
from selenium import webdriver
import chromedriver_autoinstaller
from selenium.webdriver.chrome.service import Service

chrome_ver = chromedriver_autoinstaller.get_chrome_version().split('.')[0]
print(chrome_ver)

# 브라우저 열기
try:
    #전체 화면으로 크롬 브라우저 실행
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--start-maximized') 
    driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=chrome_options)
except:
    #전체 화면으로 크롬 브라우저 실행
    chromedriver_autoinstaller.install(True)
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--start-maximized')
    driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=chrome_options)
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def get_image_title(url):
    # 웹 드라이버 초기화
    driver.implicitly_wait(5) # or bigger second
    
    # 열고자 하는 채널 -> 동영상 목록으로 된 url 페이지를 엶
    driver.get(url)
    
    image_list = list() # 썸네일을 받을 수 있는 주소 저장용 리스트
    title_list = list() # 썸네일 제목을 저장하는 리스트

    idx = 1
    while True:
        try:
            img_xpath = '/html/body/ytd-app/div/ytd-page-manager/ytd-browse/ytd-two-column-browse-results-renderer/div[1]/ytd-section-list-renderer/div[2]/ytd-item-section-renderer/div[3]/ytd-grid-renderer/div[1]/ytd-grid-video-renderer['+str(idx)+']/div[1]/ytd-thumbnail/a/yt-img-shadow/img'
            title_xpath = '/html/body/ytd-app/div/ytd-page-manager/ytd-browse/ytd-two-column-browse-results-renderer/div[1]/ytd-section-list-renderer/div[2]/ytd-item-section-renderer/div[3]/ytd-grid-renderer/div[1]/ytd-grid-video-renderer['+str(idx)+']/div[1]/div[1]/div[1]/h3/a'
            
            # 이미지가 곧바로 로드 되지 않을 때, 20초간 강제로 기다림
            img = WebDriverWait(driver, 20).until(EC.presence_of_all_elements_located((By.XPATH, img_xpath)))
            if img is None:
                print(idx, 'img is not loaded.')
            
            # 한 페이지에 약 8개 불러오는 데, 동영상 목록을 추가 불러오기 위해 스크롤 내림
            if idx % 8 == 0 :
                driver.execute_script('window.scrollBy(0, 1080);')
                time.sleep(2)
                driver.execute_script('window.scrollBy(0, 1080);')
                time.sleep(2)
                driver.execute_script('window.scrollBy(0, 1080);')
                time.sleep(2)
            
            # 썸네일 주소를 리스트에 저장
            image = driver.find_element_by_xpath(img_xpath)
            img_url = image.get_attribute('src')
            image_list.append(img_url)

            # 타이틀을 리스트에 저장
            title = driver.find_element_by_xpath(title_xpath)
            print(idx,title.text,img_url)
            title_list.append(title.text)

            idx += 1
        except Exception as e:
            print()
            print(e)
            break
    assert len(image_list) == len(title_list)
    driver.close()
    return image_list, title_list
# 자이언트 펭TV : https://m.youtube.com/channel/UCtckgmUcpzqGnzcs7xEqMzQ/videos
url = input("검색하고 싶은 채널명을 입력하세요 : ")
image, title = get_image_title(url)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11569506726457399, 'fraction_numerical': 0.012855007473841554, 'mean_word_length': 2.7595505617977527, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 6, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '462660', 'license': 'MIT', 'n_tokens_mistral': 1402, 'n_tokens_neox': 1511, 'n_words': 210, 'path': '211030_Youtube_playlist_crawling.ipynb', 'repo_name': 'sdw1621/sejong_uni_bigdataMBA', 'size': '3345'}