Python實現(xiàn)一鍵下載視頻腳本
需求
小編通常會上一些專業(yè)的視頻網(wǎng)站比如騰訊視頻、優(yōu)酷,在上面看電影、電視劇。這些網(wǎng)站有個優(yōu)點,可以緩存視頻,在通勤路上比如地鐵就可以愉快的刷劇了,因為地鐵上的網(wǎng)速通常不怎么好。
但是有一些經(jīng)典電影或者電視劇,這些視頻并沒有提供,那么我們只能上一些小電影網(wǎng)站看了,資源是有了,但是問題來了,這些小電影網(wǎng)站大多數(shù)都沒有視頻下載功能,那在地鐵上就沒法看了。
如果可以把這些視頻下載下來,再傳輸?shù)绞謾C里不就可以離線看了嗎?
接下來小編就演示下如何用 python 腳本來實現(xiàn)一鍵下載小電影網(wǎng)站的視頻。
以下腳本可以學習到
- python selenium 的使用
- python requests 的使用
- 分片下載視頻存儲本地
- 實時輸出視頻下載進度
注意:
這里的腳本主要用于測試學習目的,切勿用于生產(chǎn)環(huán)境等商業(yè)目的
推薦大家訪問官方指定平臺或?qū)I(yè)視頻網(wǎng)站,支持正版
解決方案
小編以經(jīng)??吹脑诰€之家為例,這個網(wǎng)站可以找到很多美劇資源。
首先,我們用谷歌瀏覽器打開一個視頻地址,比如https://www.zxzj.fun/video/1529-1-1.html,按F12或者右擊“檢查”打開瀏覽器控制臺
然后,點擊控制臺最左邊的選擇元素按鈕,或者按Ctrl + Shift + C,選擇網(wǎng)頁的視頻區(qū)域,就能看到video
標簽
<video class="dplayer-video dplayer-video-current lwebapp.com" webkit-playsinline="" playsinline="" preload="metadata" src="https://vod.pipi.cn/8f6897d9vodgzp1251246104/1881b495387702292624167851/f0.mp4" ></video>
可以發(fā)現(xiàn)src
屬性值就是視頻鏈接,并且是采用單獨的.mp4
視頻地址,這種地址原理上可以直接從瀏覽器下載的,直接復(fù)制這個地址在瀏覽器打開,就可以右擊下載。但是電視劇通常有很多集,每次都手動打開網(wǎng)頁-打開控制臺-復(fù)制視頻地址-再打開視頻-最后下載視頻,就很繁瑣。這時候就是腳本排上用場的時候了,可以把這個流程自動化,簡化重復(fù)操作的過程。
腳本的整體思路
- 使用
selenium
打開網(wǎng)頁 - 通過
selenium
元素選擇器找到video
標簽所在的iframe
,切換到iframe
- 通過
video
標簽,獲取到視頻地址,然后請求視頻內(nèi)容 - 采用分片下載的方式拼接視頻存儲到本地
代碼
#!/usr/bin/python # -*- coding: UTF-8 -*- # 首發(fā) lwebapp.com import requests # 谷歌瀏覽器驅(qū)動 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 # sleep模塊,讓程序停止往下運行 from time import sleep # 設(shè)置谷歌瀏覽器驅(qū)動 driver = webdriver.Chrome() # 手動改為想要下載的視頻所在網(wǎng)頁地址 url = 'https://www.zxzj.fun/video/1529-1-1.html' # 打開網(wǎng)頁 driver.get(url) try: # 通過元素選擇器找到iframe iframe = WebDriverWait(driver, 10).until( EC.presence_of_element_located( (By.CSS_SELECTOR, '#playleft iframe')) ) except: driver.quit() # 獲取到網(wǎng)頁title,便于直觀看到當前下載的視頻標題 title = driver.find_elements(By.TAG_NAME, 'title')[ 0].get_attribute('innerHTML') # 切換到iframe driver.switch_to.frame(iframe) # 通過video標簽獲取視頻地址 video = driver.find_elements(By.TAG_NAME, 'video')[0] video_url = video.get_attribute('src') print('video', video_url) # 已經(jīng)獲取到視頻地址,可以關(guān)閉瀏覽器 driver.quit() # 設(shè)置請求頭信息 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62' } # 請求視頻內(nèi)容 video_content = requests.get(video_url, headers=headers, stream=True) print("開始下載") # 視頻大小 contentLength = int(video_content.headers['content-length']) line = '大小: %.2fMB' # 大小換算 line = line % (contentLength/1024/1024) # 打印視頻總長度 print(line) # 存儲已經(jīng)下載的長度 downSize = 0 print('video_name', title) # 分片下載 with open(title+'.mp4', "wb") as mp4: for chunk in video_content.iter_content(chunk_size=1024 * 1024): if chunk: mp4.write(chunk) # 記錄已下載視頻長度,實時輸出下載進度 downSize += len(chunk) print('進度:{:.2%}'.format(downSize / contentLength), end='\r') print("下載結(jié)束")
總結(jié)
以上簡單展示了使用 python 的requests
、selenium
庫來下載一個mp4
視頻,可以當做一個學習案例。
其中還有很多待改進的地方
1.每次運行腳本只能解析下載一個視頻,或許可以改進為批量解析出一個視頻列表來下載
2.換視頻地址下載,需要手動改源碼的url
地址,可以改進做一個界面交互來讓用戶輸入
3.當前只適配了特定網(wǎng)站的視頻地址解析,其他地址不支持,可以改進針對不同的網(wǎng)站單獨出解析函數(shù)來匹配
到此這篇關(guān)于Python實現(xiàn)一鍵下載視頻腳本的文章就介紹到這了,更多相關(guān)Python下載視頻內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python tkinter 樹形列表控件(Treeview)的使用方法
這篇文章主要介紹了Python tkinter 樹形列表控件(Treeview)的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04使用python將圖片格式轉(zhuǎn)換為ico格式的示例
今天小編就為大家分享一篇使用python將圖片格式轉(zhuǎn)換為ico格式的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10python中Ansible模塊的Playbook的具體使用
這篇文章主要介紹了python中Ansible模塊的Playbook的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05Python編程之列表操作實例詳解【創(chuàng)建、使用、更新、刪除】
這篇文章主要介紹了Python編程之列表操作,結(jié)合實例形式分析了Python列表的創(chuàng)建、使用、更新、刪除等實現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下2017-07-07