家中長輩喜歡去youtube聽音樂,但將下載影片轉為mp3檔案的步驟,較為繁瑣,所以想直接寫一個code,讓長輩直接輸入想要下載的音樂歌名,便可以直接將檔案下載下來,這樣長輩們就不怕擔心整個操作步驟了!
將youtube透過第三方軟體進行下載到本地端,這樣離線也能享受音樂了!
運用selenium 模擬爬蟲,取得目標影片url連結,將url傳到第三方程式,然後進行mp3下載
能使用的第三方下載軟體很多種,但下載速度都很慢,可能要花多一點的時間分別進行優化,如果該用戶有升級youtube premium的話就根本不需要下載音樂了
此網頁容易有502 Bad Gateway,可能就要再重複requset一次
from bs4 import BeautifulSoup
from selenium import webdriver
import re
import unidecode
import pandas
import time
import requests
driver = webdriver.Chrome()
driver.get("https://www.youtube.com/?gl=TW&tab=r11") #前往這個網址
search_input = driver.find_element_by_name("search_query")
str = input("有興趣的音樂")
search_input.send_keys(str) #帳號
start_search_btn = driver.find_element_by_id("search-icon-legacy")
start_search_btn.click()
time.sleep(5)
url = driver.current_url
html = requests.get(url)
sp = BeautifulSoup(html.text, 'lxml')
url_lt = []
video_lt=sp.find_all('a', class_="yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 yt-uix-sessionlink spf-link",limit=10)
#抓youtubw前10筆內容
tag_span = []
title_span = []
href_span = []
download_url = []
lt = [[] for j in range(10)]
for i in range(10):
tag_span = video_lt[i].get("href")
title_span = video_lt[i].get("title")
href_span = tag_span[9:]
download_url = "https://yout.com/video/" + href_span +'/'
lt[i] =download_url
print(i+1,title_span)
set_number = int(input())
#得到下載的目標網址
driver.get(lt[set_number])
download_btn = driver.find_element_by_class_name("recorder-type")
download_btn.click()
time.sleep(60)
driver.close()
缺點會跳出廣告視窗
from bs4 import BeautifulSoup
from selenium import webdriver
import re
import unidecode
import pandas
import time
import requests
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options
driver = webdriver.Chrome()
driver.get("https://www.youtube.com/?gl=TW&tab=r11") #前往這個網址
search_input = driver.find_element_by_name("search_query")
str = input("有興趣的音樂")
search_input.send_keys(str) #帳號
start_search_btn = driver.find_element_by_id("search-icon-legacy")
start_search_btn.click()
time.sleep(5)
url = driver.current_url
html = requests.get(url)
sp = BeautifulSoup(html.text, 'lxml')
url_lt = []
video_lt=sp.find_all('a', class_="yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 yt-uix-sessionlink spf-link",limit=10)
#抓youtubw前10筆內容
tag_span = []
title_span = []
href_span = []
download_url = []
lt = [[] for j in range(10)]
for i in range(10):
tag_span = video_lt[i].get("href")
title_span = video_lt[i].get("title")
href_span = tag_span[9:]
download_url = "https://youtube.com/" + tag_span +'/'
lt[i] =download_url
print("{:<8d} {}".format(i+1,title_span))
set_number = int(input()) -1
#得到下載的目標網址,輸入感興趣的號碼
driver.close()
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--disable-notifications")
driver = webdriver.Chrome(options=chrome_options)
driver.implicitly_wait(10)
download = lt[set_number]
driver.get("https://www.youtubeto.com/zh/")
sent_url = driver.find_element_by_id("url")
time.sleep(10)
sent_url.send_keys(download) #
load_mp3 = driver.find_element_by_id("DownloadMP3_text")
load_mp4 = driver.find_element_by_id("DownloadMP4_text")
action = ActionChains(driver)
action.move_to_element(load_mp4).perform()
action.click(load_mp3)
#模擬滑鼠移動
load_mp3.click()
time.sleep(60)
driver.quit()
#下載的音樂會存在download資料夾
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up