用自動化工具selenium批量獲取油管播放列表內(nèi)視頻的url
今天突發(fā)奇想想下載一些古早哆啦A夢的視頻,看了一下B站上沒有我滿意的形式,所以上油管看了一下:
不錯不錯,配合我的油管視頻解析網(wǎng)站可以直接下載到本地
唯一的問題就是:一個一個復(fù)制鏈接太麻煩了?。?!
如果有一個工具可以批量復(fù)制列表內(nèi)的視頻鏈接就好了,正好現(xiàn)在在學(xué)Python,此時不用何時用?
簡單百度了一下,我把目光放在了自動化操作瀏覽器的工具Selenium上,開源、支持python、模擬操作用戶行為,是一款很不錯的工具。
太長不看版:文末會附上完整代碼,有兩處需要自行修改得到地方
首先就是selenium庫的安裝
pip install selenium
我這里用的是Chrome瀏覽器,所以在這里下載Chrome瀏覽器的驅(qū)動,其他瀏覽器可以自行在網(wǎng)上查找,注意下載對應(yīng)本瀏覽器版本的驅(qū)動。
然后導(dǎo)入庫:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
我們的核心任務(wù)就是使用selenium獲取視頻url:
def get_playlist_video_urls(playlist_url):
...
return video_urls
輸入視頻列表的url,輸出存放所以視頻url的列表
編寫函數(shù)內(nèi)容:
- 設(shè)置瀏覽器的驅(qū)動路徑
driver_path = r'在這里輸入你的驅(qū)動存放路徑'
- 初始化:
service = webdriver.ChromeService() driver = webdriver.Chrome(service=service) service = webdriver.ChromeService(executable_path=driver_path)
- 打開播放列表頁面,等待加載,這里等待時間根據(jù)網(wǎng)絡(luò)和電腦性能調(diào)整:
driver.get(playlist_url) time.sleep(5)
- 模擬滾動,加載所有視頻:
last_height = driver.execute_script("return document.documentElement.scrollHeight") while True: driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);") time.sleep(2) new_height = driver.execute_script("return document.documentElement.scrollHeight") if new_height == last_height: break last_height = new_height
- 獲取所有鏈接:
這里介紹一下find_elements方法:video_links = driver.find_elements(by=By.XPATH,value='//*[@id="video-title"]') video_urls = [link.get_attribute('href') for link in video_links]
主要有兩個參數(shù),一個是def find_elements(self, by=By.ID, value: Optional[str] = None) -> List[WebElement]:
by
,一個是value
by
參數(shù)有八種值:
通過目標(biāo)的class By: """Set of supported locator strategies.""" ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector"
id
、XPATH
等參數(shù)來搜索,具體介紹參考這篇博客,我們這里使用了XPATH搜索,'value'
具體語法參考另一篇博客
這下這個函數(shù)的基本結(jié)構(gòu)就完成了,只需要編寫主函數(shù)即可:
# 替換成要獲取的播放列表的URL
playlist_url = 'URL'
# 獲取播放列表中所有視頻的URL
video_urls = get_playlist_video_urls(playlist_url)
# 打印所有視頻的URL
for url in video_urls:
print(url)
這下就可以完美輸出啦
附:文章來源:http://www.zghlxwxcb.cn/news/detail-772624.html
完整代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-772624.html
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def get_playlist_video_urls(playlist_url):
# 設(shè)置Chrome瀏覽器的驅(qū)動路徑
driver_path = r''
# 初始化
service = webdriver.ChromeService()
driver = webdriver.Chrome(service=service)
service = webdriver.ChromeService(executable_path=driver_path)
# 打開播放列表頁面,等待頁面加載
driver.get(playlist_url)
time.sleep(5)
# 模擬滾動以加載所有視頻
last_height = driver.execute_script("return document.documentElement.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
time.sleep(2)
new_height = driver.execute_script("return document.documentElement.scrollHeight")
if new_height == last_height:
break
last_height = new_height
# 獲取所有視頻鏈接
video_links = driver.find_elements(by=By.XPATH,value='//*[@id="video-title"]')
video_urls = [link.get_attribute('href') for link in video_links]
# 關(guān)閉瀏覽器
driver.quit()
return video_urls
if __name__ == "__main__":
# 替換成您要獲取的播放列表的URL
playlist_url = 'URL'
# 獲取播放列表中所有視頻的URL
video_urls = get_playlist_video_urls(playlist_url)
# 打印所有視頻的URL
for url in video_urls:
print(url)
到了這里,關(guān)于用自動化工具selenium批量獲取油管播放列表內(nèi)視頻的url的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!