Python實現視頻下載與合成的示例代碼
模塊使用
requests >>> pip install requests (數據請求 第三方模塊)
re # 正則表達式 去匹配提取數據
json
開發(fā)環(huán)境
Python 3.8 解釋器
Pycharm 2021.2 版本 建議
win + R 輸入cmd 輸入安裝命令 pip install 模塊名 如果出現爆紅 可能是因為 網絡連接超時 切換國內鏡像源
案例實現
1.明確需求
采集內容, 先分析一個視頻是從哪里獲取
通過開發(fā)者工具進行抓包分析, 分析視頻數據可以從哪里獲取內容 格式 m3u8視頻內容
當我們網站視頻格式 是m3u8的時候, 有一個專門存放所有ts視頻片段的文件
2.代碼實現步驟
- 發(fā)送請求
- 獲取數據
- 解析數據
- 保存數據
1. 發(fā)送請求, 對于視頻播放頁面url地址發(fā)送請求
2. 獲取數據, 獲取服務器返回response響應數據
3. 解析數據, 提取我們想要的數據內容 視頻標題 以及 m3u8 鏈接
4. 發(fā)送請求, 對于 m3u8 鏈接 發(fā)送請求
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. 發(fā)送請求, 對于視頻播放頁面url地址發(fā)送請求
用python代碼去模擬瀏覽器 對于 url地址發(fā)送請求
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地址發(fā)送請求, 并且攜帶上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) # 字符串轉成字典 怎么轉 最穩(wěn)妥查看數據類型 直接用 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地址發(fā)送請求, 并且攜帶上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實現視頻下載與合成的示例代碼的文章就介紹到這了,更多相關Python視頻下載 合成內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Windows環(huán)境打包python工程為可執(zhí)行程序的詳細過程
我的開發(fā)環(huán)境是windows7,然后系統(tǒng)是64位,安裝的python和wxpython都是32位的,本文記錄我怎樣用pyinstaller打包我用python開發(fā)的工程,在網上搜索了很多資源,基本上都是不全的,所以我在這兒記錄一下這個比較完整的過程,一起看看吧2024-01-01

