goodthings4me.tistory.com
유튜브 영상 저장을 하는 파이썬 코드를 chatGPT에 물어보고 만들다 보니 예전에 만들어서 포스팅했던 글(유튜브 영상 다운로드)에 덧붙여서 여러 동영상을 저장하는 코드(selenium 모듈 사용)도 만들어봤다.
유튜브 영상 고화질 다운로드 - 다수의 영상을 저장하는 파이썬 코드
아래와 같은 유뷰트 영상 사이트(https://www.youtube.com/@kescotv)에서

"모두재생" 부분을 클릭하면, 우측에 유튜브 영상 리스트가 보인다. 이 리스트에 있는 영상 전체를 받는 파이썬 코드를 연습 삼아 작성해 보았다.

import os
from selenium import webdriver
import chromedriver_autoinstaller
from selenium.webdriver.common.by import By
from pytube import YouTube
from pytube.cli import on_progress
import time
import random
def chrome_driver():
options = webdriver.ChromeOptions()
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36'
options.add_argument(f'user-agent={user_agent}')
options.add_argument("headless") # 웹 브라우저를 시각적으로 띄우지 않는 headless chrome 옵션
options.add_argument("lang=ko_KR") # 언어 설정
options.add_experimental_option('detach', True) # True는 창 안 사라지게
options.add_experimental_option("excludeSwitches", ["enable-logging"]) # DevTool 개발도구 로그 숨기기
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
# 크롬 브라우저 버전 확인하기
chrome_ver = chromedriver_autoinstaller.get_chrome_version()
print(chrome_ver) # 108.0.5359.125
# 크롬 드라이버 자동 설치
chromedriver_autoinstaller.install(True)
chromedriver_path = f'./{chrome_ver.split(".")[0]}/chromedriver.exe'
if os.path.exists(chromedriver_path):
print(f'크롬 드라이버 버전 {chrome_ver.split(".")[0]} 있음!')
else:
chromedriver_autoinstaller.install(True) # 크롬 드라이버 다운로드
print(f'크롬 드라이버 설치 완료!({chrome_ver.split(".")[0]} 버전)')
driver = webdriver.Chrome(options=options)
return driver
def youtube_download(url):
# 저장 폴더 만들기
save_folder = './youtube_download'
if not os.path.exists(save_folder):
os.mkdir(save_folder)
else:
pass
try:
# YouTube 객체 생성
yt = YouTube(url, on_progress_callback=on_progress)
# print(yt.streams) # streams 처리 전체 정보
print(f'영상제목: {yt.title}')
print(f'영상 설명: {yt.description}')
print(f'영상 조회수: {yt.views}')
print(f'영상 길이: {yt.length} sec. [{str(yt.length // 60).zfill(2)}:{str(yt.length % 60).zfill(2)}]')
print(f'영상 채널 URL: {yt.channel_url}')
print(f'영상 URL: {yt.watch_url}')
print(f'영상 등록일: {yt.publish_date}')
# 영상 다운로드
yt.streams.get_highest_resolution().download(save_folder)
print(f'\n\n유튜브 영상 "{yt.title}"\n다운로드 완료!')
return True
except Exception as e:
print(f'Error: {e}')
return False
def main():
driver = chrome_driver()
url = 'https://www.youtube.com/watch?v=UKdV7PdZOLQ&list=UULF4mflJiSnz2YD0NyEFjRLAQ'
driver.get(url)
driver.implicitly_wait(5)
time.sleep(random.uniform(0.5, 1.5))
get_url = driver.current_url
print(get_url)
a_tags = driver.find_elements(By.CSS_SELECTOR, 'div#columns div#container div#items a#wc-endpoint')
print(len(a_tags))
play_list = []
for a_tag in a_tags:
play_list.append(a_tag.get_attribute('href'))
return play_list, len(a_tags)
if __name__ == '__main__':
movie_url_list, total = main()
print(movie_url_list)
for cnt, url in enumerate(movie_url_list, 1):
youtube_download(url)
print(f'\n{cnt}/{total} 다운로드 완료!')
time.sleep(3)
- "모두재생" 부분을 클릭해서 전환된 웹페이지의 URL을 main() 함수의 url 값으로 입력함
- chrome webdriver를 자동으로 설치하는 함수를 호출해서 셀레니움으로 유튜브 영상의 URL을 모두 추출하여 리스트(play_list)로 저장
- 반환받은 리스트를 for문으로 순환시키며 youtube_download() 함수 호출
- 다운로드한 파일은 youtube_download 폴더에 저장됨
[실행결과]
40
['https://www.youtube.com/watch?v=UKdV7PdZOLQ&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=1', 'https://www.youtube.com/watch?v=zFyLYlnIkd8&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=2', 'https://www.youtube.com/watch?v=sa-w0LlcFSw&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=3', 'https://www.youtube.com/watch?v=Mpv4qQf9G-g&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=4', 'https://www.youtube.com/watch?v=B-k11Hai5q8&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=5', 'https://www.youtube.com/watch?v=kcGfpF8DwtU&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=6', 'https://www.youtube.com/watch?v=I_6HlgSS1E4&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=7', 'https://www.youtube.com/watch?v=fIY3YnjN5Ds&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=8', 'https://www.youtube.com/watch?v=OMWWSGj8is8&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=9', 'https://www.youtube.com/watch?v=aOhvWHz4KoU&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=10', 'https://www.youtube.com/watch?v=UVay8f3e5tk&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=11', 'https://www.youtube.com/watch?v=13I-FsDg560&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=12', 'https://www.youtube.com/watch?v=ebxmxMX1xFw&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=13', 'https://www.youtube.com/watch?v=FW4I5kQcZ7M&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=14', 'https://www.youtube.com/watch?v=1U33V7-U67Q&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=15', 'https://www.youtube.com/watch?v=gID695INC7s&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=16', 'https://www.youtube.com/watch?v=fsEdx4J8WOI&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=17', 'https://www.youtube.com/watch?v=pxZ-2SqlHZc&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=18', 'https://www.youtube.com/watch?v=zwhZa6i-tq4&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=19', 'https://www.youtube.com/watch?v=mff12EyFrmo&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=20', 'https://www.youtube.com/watch?v=QaACO69DQUw&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=21', 'https://www.youtube.com/watch?v=fu9tiwGOdRs&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=22', 'https://www.youtube.com/watch?v=ystAMDyLUes&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=23', 'https://www.youtube.com/watch?v=2Ex4BSh9Jw4&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=24', 'https://www.youtube.com/watch?v=o92pAlMCtvA&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=25', 'https://www.youtube.com/watch?v=Ak1IFREK7zM&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=26', 'https://www.youtube.com/watch?v=j2DMmY3C238&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=27', 'https://www.youtube.com/watch?v=-gPQnmP9cjc&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=28', 'https://www.youtube.com/watch?v=3gZKCYTPB8o&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=29', 'https://www.youtube.com/watch?v=hIJXPnaC9tg&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=30', 'https://www.youtube.com/watch?v=izUrK_MsbOA&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=31', 'https://www.youtube.com/watch?v=h5X5eeaT3KQ&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=32', 'https://www.youtube.com/watch?v=PR-pT2_mlVY&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=33', 'https://www.youtube.com/watch?v=y3f1UenHWEI&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=34', 'https://www.youtube.com/watch?v=qq2tGHRDesw&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=35', 'https://www.youtube.com/watch?v=HwBhnVp-1aQ&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=36', 'https://www.youtube.com/watch?v=811q8lrUmfM&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=37', 'https://www.youtube.com/watch?v=HOecxXsUXOc&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=38', 'https://www.youtube.com/watch?v=N6GRi8UNQFY&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=39', 'https://www.youtube.com/watch?v=owYz2mHWf8w&list=UULF4mflJiSnz2YD0NyEFjRLAQ&index=40']
영상제목: [케스코TV] 시공현장을 찾아서 1화
영상 설명: [ 창호 교체 문의 ]
. 1588-0730
. 5초견적 받아보기 https://bit.ly/3ZIqbhE
[ 관련SNS ]
. 홈페이지 http://k-esco.kr/
. 블로그 https://blog.naver.com/k-esco
. 인스타그램 https://www.instagram.com/kesco_kr/
영상 조회수: 245
영상 길이: 295 sec. [04:55]
영상 채널 URL: https://www.youtube.com/channel/UC4mflJiSnz2YD0NyEFjRLAQ
영상 URL: https://youtube.com/watch?v=UKdV7PdZOLQ
영상 등록일: 2023-01-18 00:00:00
↳ |██████████████████████████████| 100.0%
유튜브 영상 "[케스코TV] 시공현장을 찾아서 1화"
다운로드 완료!
영상제목: 샷시교체, 1등 업체에서 손쉽게 견적을 받아보세요!
영상 설명: [ 창호 교체 문의 ]
. 1588-0730
. 5초견적 받아보기 https://bit.ly/3jLtswp
영상 조회수: 54078
영상 길이: 42 sec. [00:42]
영상 채널 URL: https://www.youtube.com/channel/UC4mflJiSnz2YD0NyEFjRLAQ
영상 URL: https://youtube.com/watch?v=zFyLYlnIkd8
영상 등록일: 2023-01-02 00:00:00
↳ |██████████████████████████████| 100.0%
유튜브 영상 "샷시교체, 1등 업체에서 손쉽게 견적을 받아 보세요!"
다운로드 완료!
영상제목: 그린리모델링 통영
영상 설명:
영상 조회수: 73
영상 길이: 82 sec. [01:22]
영상 채널 URL: https://www.youtube.com/channel/UC4mflJiSnz2YD0NyEFjRLAQ
영상 URL: https://youtube.com/watch?v=sa-w0LlcFSw
영상 등록일: 2022-12-23 00:00:00
↳ |██████████████████████████████| 100.0%
유튜브 영상 "그린리모델링 통영"
다운로드 완료!
영상제목: [케스코X그린리모델링] 부산광역시 노후단독주택 시공
영상 설명:
영상 조회수: 118
영상 길이: 82 sec. [01:22]
영상 채널 URL: https://www.youtube.com/channel/UC4mflJiSnz2YD0NyEFjRLAQ
영상 URL: https://youtube.com/watch?v=Mpv4qQf9G-g
영상 등록일: 2022-12-23 00:00:00
↳ |██████████████████████████████| 100.0%
유튜브 영상 "[케스코X그린리모델링] 부산광역시 노후단독 주택 시공"
다운로드 완료!
영상제목: [케스코X그린리모델링] 강원도 원주시 노후단독
주택시공
영상 설명:
영상 조회수: 144
영상 길이: 82 sec. [01:22]
영상 채널 URL: https://www.youtube.com/channel/UC4mflJiSnz2YD0NyEFjRLAQ
영상 URL: https://youtube.com/watch?v=B-k11Hai5q8
영상 등록일: 2022-12-19 00:00:00
↳ |██████████████████████████████| 100.0%
- 이하 생략 -
블로그 인기글
폐업 신고 절차와 부가가치세 신고하는 방법
폐업 신고 시 세무서 안 가고 온라인으로 신고하는 방법인 '국세청 홈택스를 이용하여 폐업 신고하는 절차와 폐업 후 해야 하는 부가가치세 신고, 인건비 저리, 종합소득세 신고 등에 대해 포스팅합니다. 폐업 신고 시 홈택스 이용하는 방법과 부가가치세 등 신고 절차 여러가지 사유로 폐업을 해야 할 때, 예전에는 세무서를 방문해야 했지만 국세청 홈택스가 생긴 이후에는 사업자 등록이나 폐업 등을 인터넷으로 할 수가 있게 되었습니다. 특히, 코로나 시국인 요즘은 더더욱 온라인 신청 업무가 더 활성화되었죠. 폐업을 한다는 것 자체가 우울한 일인데, 발품을 파는 것보다는 커피 한잔 하면서 인터넷으로 간단하게 처리하는 게 좋을 듯하여 그 절차를 올려봅니다. 폐업은 폐업 신고와 함께 폐업 후 절차까지 모두 마쳐야 불이익이..
goodthings4me.tistory.com
엑셀 시트 분리 저장 - 엑셀 파일의 시트를 분리하여 저장하기
엑셀을 사용하다 보면 엑셀 시트를 분리해서 저장해야 할 때가 있다. 최근에도 이런 경우가 발생하여 구글링 후 엑셀 시트 분리 업무를 수행하고 내친김에 다른 사람들도 사용할 수 있도록 파이썬 tkinter로 프로그램으로 만들어 보았다. Excel Sheets 분리 저장하는 프로그램(with 파이썬 Tkinter) ※ 프로그램 다운로드(네이버 MYBOX에서 공유) : ExcelSeparateSheets.zip ▶ 프래그램을 실행하면 다음과 같이 초기 화면이 보인다. 찾아보기 : 엑셀 파일이 있는 폴더를 선택한다. (프로그램이 있는 최상위 디렉터리가 열린다) 실행하기 : 프로그램 실행 버튼 상태 변경 순서 : 실행전 → 실행 중 → Sheet "OOO" 분리 저장 중 → 실행 완료 실행 결과 확인 : 엑셀 파..
goodthings4me.tistory.com
유튜브 영상 등의 URL 주소를 QR코드로 만들기
네이버 QR코드, makeQR, MUST QRcode, 무료 온라인 QRCode 생성기 등의 웹사이트에서 유튜브 영상 등의 URL을 입력하여 QR코드를 만들 수 있다. QR코드를 생성할 수 있는 사이트와 프로그램 URL 주소를 붙여넣기 한 후 "QR 코드 생성" 버튼을 클릭하면 큐알코드가 이미지로 생성되고, 다운로드도 할 수 있는 사이트 https://truedoum.com/useful/qrcode/ # 유튜브에서 동영상 URL을 복사하는 방법 유튜브에서 QR코드를 만들 동영상을 검색한다. 해당 동영상을 클릭한다. 동영상 위에서 마우스 우클릭 후 나오는 팝업창에서 “동영상 URL 복사”를 클릭하거나 영상 하단의 “공유”를 클릭하여 나온 창에서 URL를 복사한다. 아래의 웹사이트 중 하나를 선택한 후 복사..
goodthings4me.tistory.com
'코딩 연습' 카테고리의 다른 글
pyinstaller 내에 sqlite3 db 추가하는 방법 (0) | 2023.03.26 |
---|---|
파이썬 판다스(pandas) 활용한 엑셀 데이터 분리 (0) | 2023.03.26 |
네이버 부동산 아파트 세대별 면적 추출하는 방법(selenium 활용) (0) | 2023.02.09 |
chatGPT에서 유튜브 영상 다운로드 파이썬 코드 물어보니... (0) | 2023.02.08 |
용량이 큰 엑셀 자료를 텍스트로 변환하는 방법 (0) | 2023.02.06 |
댓글