요즘 배성제 텐 다시듣기를 하고 있습니다.
유튜브에 올라와 있는건 편집 없이 올려져 있는거라 운전 중에 듣기 어렵더군요
sbs 홈페이지에 노래 광고 없는 편집본이 있는데 일일이 다운 받기 힘들어 파이썬으로 전체 다운 받을 수 있는 코드를 만들었습니다.
실행 방법은 아래와 같습니다. 먼저 파이썬이 설치되어 있어야 합니다.
1. 크롬 드라이버를 다운 받아 exe 파일을 실행시킨다
2. 비쥬얼스튜디오 코드에서 필요한 라이브러리를 설치한다.
pip install requests beautifulsoup4
pip install selenium
pip install webdriver-manager
3. 아래 py 파일을 실행한다
배성재 텐 전체 다운로드 파이썬 코드는 아래와 같습니다.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time
import os
import urllib.parse
import requests
from bs4 import BeautifulSoup
import re
# 크롬 드라이버 설정
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# 다운로드할 페이지 범위 설정
start_page = 1
end_page = 313
# 저장할 폴더 설정 (현재 디렉토리에 'mp3_files' 폴더를 생성)
download_folder = "mp3_files"
if not os.path.exists(download_folder):
os.makedirs(download_folder)
# 파일 다운로드 함수
def download_file(url, file_name):
response = requests.get(url)
file_path = os.path.join(download_folder, file_name)
with open(file_path, "wb") as file:
file.write(response.content)
# 파일명에서 특수 문자를 제거하는 함수
def sanitize_filename(filename):
# 탭 문자와 줄바꿈 문자 제거
filename = filename.replace('\t', '').replace('\n', '')
# 파일명에서 윈도우에서 허용되지 않는 특수 문자를 '_'로 대체
return re.sub(r'[\\/*?:"<>|]', "_", filename)
# MP3 파일을 다운로드하는 함수
def download_mp3_files(soup, page_number):
# MP3 파일 링크 찾기 (다운로드 버튼의 href 속성)
download_links = soup.find_all('a', class_='podcast_btn_download')
for link in download_links:
raw_mp3_url = link['href'] # 파일 다운로드 링크
decoded_url = urllib.parse.unquote(raw_mp3_url.split('fileUrl=')[-1].split('&')[0])
original_file_name = f"page_{page_number}_{link['download']}.mp3"
# 파일명 안전하게 변환
safe_file_name = sanitize_filename(original_file_name)
mp3_url = decoded_url.replace('%2F', '/')
print(f"Downloading {safe_file_name} from {mp3_url}")
download_file(mp3_url, safe_file_name)
# 페이지 이동 함수
def go_to_page(driver, page_number):
try:
# '다음페이지 보기' 버튼 클릭 (페이지가 11, 21, 31 등일 때 다음 페이지로 이동)
clicks_needed = (page_number - 1) // 10 # 11페이지부터는 1번, 21페이지부터는 2번, 31페이지부터는 3번...
for _ in range(clicks_needed):
next_page_button = driver.find_element(By.ID, "program-front-radio-pagination-next")
next_page_button.click()
time.sleep(2) # 페이지 로딩 대기
# 페이지 번호에 해당하는 버튼 클릭
page_link = driver.find_element(By.ID, f"program-front-radio-pagination-page-{page_number}")
if "current" not in page_link.get_attribute("class"):
page_link.click()
time.sleep(2) # 페이지 로딩 대기
except Exception as e:
print(f"페이지 이동 중 오류 발생: {e}")
# 메인 함수 - Selenium으로 페이지를 이동하면서 MP3 파일 다운로드
for page_number in range(start_page, end_page + 1):
# 페이지 로드
url = "https://programs.sbs.co.kr/radio/ten/aods/57944"
driver.get(url)
# 페이지 로드 후 약간의 대기 시간 (자바스크립트가 로드되도록)
time.sleep(3)
# 페이지 이동 함수 호출
go_to_page(driver, page_number)
# 페이지 HTML 소스를 BeautifulSoup으로 파싱
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'html.parser')
# 해당 페이지에서 MP3 파일을 다운로드
print(f"Scraping page {page_number}...")
download_mp3_files(soup, page_number)
# 크롬 드라이버 종료
driver.quit()
print("모든 MP3 파일 다운로드 완료!")
반응형
'코딩' 카테고리의 다른 글
3강, 4강 레퍼럴 회원님 소스코드. (0) | 2025.03.31 |
---|---|
코인 선물 ai 자동매매 프로그램 만들기 2강 소스 코드 (1) | 2025.03.30 |
트레이딩뷰 이동평균선 8개, 볼린저밴드, 일목균형표 한번에 (0) | 2024.07.16 |
코딩 개그 모음 코딩 유머 모음 코딩 고양이 레고 코딩 (0) | 2024.06.25 |
재미있는별명생성기, 웃긴닉네임추천기, 닉네임생성기 2탄 (0) | 2024.06.20 |