我通常會上一些專業的視頻網站比如騰訊視頻、優酷,在上面看電影、電視劇。這些網站有個優點,可以緩存視頻,在通勤路上比如地鐵就可以愉快的刷劇了,因為地鐵上的網速通常不怎麼好。
但是有一些經典電影或者電視劇,這些視頻並沒有提供,那麼我們只能上一些小電影網站看了,資源是有了,但是問題來了,這些小電影網站大多數都沒有視頻下載功能,那在地鐵上就沒法看了。
如果可以把這些視頻下載下來,再傳輸到手機裡不就可以離線看了嗎?
接下來小編就演示下如何用 python 腳本來實現一鍵下載小電影網站的視頻。
以下腳本可以學習到
注意:
推薦大家訪問官方指定平台或專業視頻網站,支持正版
小編以經常看的在線之家為例,這個網站可以找到很多美劇資源。
首先,我們用谷歌浏覽器打開一個視頻地址,比如 https://www.zxzj.fun/video/1529-1-1.html
,按 F12
或者右擊“檢查”打開浏覽器控制台
然後,點擊控制台最左邊的選擇元素按鈕,或者按 Ctrl + Shift + C
,選擇網頁的視頻區域,就能看到 video
標簽
<video class="dplayer-video dplayer-video-current" webkit-playsinline="" playsinline="" preload="metadata" src="https://vod.pipi.cn/8f6897d9vodgzp1251246104/1881b495387702292624167851/f0.mp4" ></video>
可以發現 src
屬性值就是視頻鏈接,並且是采用單獨的 .mp4
視頻地址,這種地址原理上可以直接從浏覽器下載的,直接復制這個地址在浏覽器打開,就可以右擊下載。但是電視劇通常有很多集,每次都手動打開網頁-打開控制台-復制視頻地址-再打開視頻-最後下載視頻,就很繁瑣。這時候就是腳本排上用場的時候了,可以把這個流程自動化,簡化重復操作的過程。
腳本的整體思路
selenium
打開網頁selenium
元素選擇器找到 video
標簽所在的 iframe
,切換到 iframe
video
標簽,獲取到視頻地址,然後請求視頻內容#!/usr/bin/python # -*- coding: UTF-8 -*- import requests # 谷歌浏覽器驅動 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 # 設置谷歌浏覽器驅動 driver = webdriver.Chrome() # 手動改為想要下載的視頻所在網頁地址 url = 'https://www.zxzj.fun/video/1529-1-1.html' # 打開網頁 driver.get(url) try: # 通過元素選擇器找到iframe iframe = WebDriverWait(driver, 10).until( EC.presence_of_element_located( (By.CSS_SELECTOR, '#playleft iframe')) ) except: driver.quit() # 獲取到網頁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) # 已經獲取到視頻地址,可以關閉浏覽器 driver.quit() # 設置請求頭信息 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' } # 請求視頻內容 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) # 存儲已經下載的長度 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("下載結束")
以上簡單展示了使用 python 的 requests
、 selenium
庫來下載一個 mp4
視頻,可以當做一個學習案例。
其中還有很多待改進的地方
url
後續有時間再來分享更多有趣實用的 python 腳本。