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