程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python一鍵下載視頻腳本分享

編輯:Python

需求

我通常會上一些專業的視頻網站比如騰訊視頻、優酷,在上面看電影、電視劇。這些網站有個優點,可以緩存視頻,在通勤路上比如地鐵就可以愉快的刷劇了,因為地鐵上的網速通常不怎麼好。

但是有一些經典電影或者電視劇,這些視頻並沒有提供,那麼我們只能上一些小電影網站看了,資源是有了,但是問題來了,這些小電影網站大多數都沒有視頻下載功能,那在地鐵上就沒法看了。

如果可以把這些視頻下載下來,再傳輸到手機裡不就可以離線看了嗎?

接下來小編就演示下如何用 python 腳本來實現一鍵下載小電影網站的視頻。

以下腳本可以學習到

  • python selenium 的使用
  • python requests 的使用
  • 分片下載視頻存儲本地
  • 實時輸出視頻下載進度

注意:

  1. 這裡的腳本主要用於測試學習目的,切勿用於生產環境等商業目的
  2. 推薦大家訪問官方指定平台或專業視頻網站,支持正版

解決方案

小編以經常看的在線之家為例,這個網站可以找到很多美劇資源。

首先,我們用谷歌浏覽器打開一個視頻地址,比如 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 腳本。

 


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved