您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Python怎么實現(xiàn)視頻下載與合成”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“Python怎么實現(xiàn)視頻下載與合成”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
requests >>> pip install requests (數(shù)據(jù)請求 第三方模塊)
re # 正則表達式 去匹配提取數(shù)據(jù)
json
Python 3.8 解釋器
Pycharm 2021.2 版本 建議
win + R 輸入cmd 輸入安裝命令 pip install 模塊名 如果出現(xiàn)爆紅 可能是因為 網(wǎng)絡(luò)連接超時 切換國內(nèi)鏡像源
采集內(nèi)容, 先分析一個視頻是從哪里獲取
通過開發(fā)者工具進行抓包分析, 分析視頻數(shù)據(jù)可以從哪里獲取內(nèi)容 格式 m3u8視頻內(nèi)容
當我們網(wǎng)站視頻格式 是m3u8的時候, 有一個專門存放所有ts視頻片段的文件
發(fā)送請求
獲取數(shù)據(jù)
解析數(shù)據(jù)
保存數(shù)據(jù)
1. 發(fā)送請求, 對于視頻播放頁面url地址發(fā)送請求
2. 獲取數(shù)據(jù), 獲取服務(wù)器返回response響應(yīng)數(shù)據(jù)
3. 解析數(shù)據(jù), 提取我們想要的數(shù)據(jù)內(nèi)容 視頻標題 以及 m3u8 鏈接
4. 發(fā)送請求, 對于 m3u8 鏈接 發(fā)送請求
5. 獲取數(shù)據(jù), 獲取服務(wù)器返回response響應(yīng)數(shù)據(jù)
6. 解析數(shù)據(jù), 提取所有ts文件url [視頻片段]
7. 保存數(shù)據(jù), 把所有視頻保存下來, 然后合成為一個整體視頻內(nèi)容
import requests # 數(shù)據(jù)請求模塊 pip install requests 在cmd里面 輸入命令 import re # 導入正則表達式模塊 內(nèi)置模塊 import json import pprint # 格式化輸出模塊 for page in range(1, 17): print(f'--------------------正在采集第{page}頁的數(shù)據(jù)內(nèi)容--------------------') list_url = 'https://www.acfun.cn/u/45321802' # 批量 ctrl + R 選中目標 data = { 'quickViewId': 'ac-space-video-list', 'reqID': page + 1, 'ajaxpipe': '1', 'type': 'video', 'order': 'newest', 'page': page, 'pageSize': '20', 't': '1649944573765', } headers = { # 'cookies': '你的cookie', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36' } # get請求 有一個params參數(shù) # post請求 data 參數(shù) response = requests.get(url=list_url, params=data, headers=headers) # print(response.text) id_list = re.findall('a href=.*?ac(.*?)"', response.text) for index in id_list: video_id = index.replace('\\', '') """ 1. 發(fā)送請求, 對于視頻播放頁面url地址發(fā)送請求 用python代碼去模擬瀏覽器 對于 url地址發(fā)送請求 video """ url = f'https://www.acfun.cn/v/ac{video_id}' # 確定請求url地址 # 請求頭 用偽裝python代碼, 為了被服務(wù)器識別出來 是爬蟲程序 一種簡單反反爬手段 當你加ua 得到數(shù)據(jù)的時候, 可能要cookie # 需要登陸才能獲得數(shù)據(jù)的, 需要加cookie 用戶信息, 常用于檢測是否登陸賬號 headers = { # 'cookies': '你的cookie', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36' } # 通過requests模塊里面get請求方式, 對于url地址發(fā)送請求, 并且攜帶上headers請求頭偽裝, 最后用response自定義變量接收返回數(shù)據(jù) response = requests.get(url=url, headers=headers) # 2. 獲取數(shù)據(jù) # print(response.text) # 3. 解析數(shù)據(jù) 通過re模塊里面findall的方法 在response.text里面去找尋 標題數(shù)據(jù) re.S 匹配換行 # 正則表達式提取出來的數(shù)據(jù)返回都是列表數(shù)據(jù)類型 實現(xiàn)過程不重要, 方式方法很多, 你喜歡用哪個都可以 只要可以取到數(shù)據(jù)都OK title = re.findall('<title >(.*?) - AcFun彈幕視頻網(wǎng) - 認真你就輸啦 \(\?ω\?\)ノ- \( ゜- ゜\)つロ</title>', response.text)[0] video_info = re.findall('window.pageInfo = window.videoInfo = (.*?);', response.text)[0] # print(video_info) # 字符串轉(zhuǎn)成字典 怎么轉(zhuǎn) 最穩(wěn)妥查看數(shù)據(jù)類型 直接用 type() 這個函數(shù)去查看 json_data = json.loads(video_info) # pprint.pprint(json_data) # 字典取值 根據(jù)冒號左邊的內(nèi)容(鍵) 提取冒號右邊的內(nèi)容(值) m3u8_url = \ json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['backupUrl'][0] # print(title) # print(m3u8_url) # 通過requests模塊里面get請求方式, 對于m3u8_url地址發(fā)送請求, 并且攜帶上headers請求頭偽裝, 獲取響應(yīng)體文本數(shù)據(jù), 用m3u8_data自定義變量接收數(shù)據(jù) m3u8_data = requests.get(url=m3u8_url, headers=headers).text # split() 字符串分割 m3u8_data = re.sub('#E.*', '', m3u8_data).split() # print(m3u8_data) for ts in m3u8_data: ts_url = 'https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/' + ts ts_content = requests.get(url=ts_url, headers=headers).content # ab 是什么意思 a追加保存, b 二進制數(shù)據(jù) ab 以二進制數(shù)據(jù)追加保存 with open('video\\' + title + '.mp4', mode='ab') as f: f.write(ts_content) print('視頻保存完成: ', title)
讀到這里,這篇“Python怎么實現(xiàn)視頻下載與合成”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。