Python實現(xiàn)視頻下載與合成的示例代碼
模塊使用
requests >>> pip install requests (數(shù)據(jù)請求 第三方模塊)
re # 正則表達式 去匹配提取數(shù)據(jù)
json
開發(fā)環(huán)境
Python 3.8 解釋器
Pycharm 2021.2 版本 建議
win + R 輸入cmd 輸入安裝命令 pip install 模塊名 如果出現(xiàn)爆紅 可能是因為 網(wǎng)絡(luò)連接超時 切換國內(nèi)鏡像源
案例實現(xiàn)
1.明確需求
采集內(nèi)容, 先分析一個視頻是從哪里獲取
通過開發(fā)者工具進行抓包分析, 分析視頻數(shù)據(jù)可以從哪里獲取內(nèi)容 格式 m3u8視頻內(nèi)容
當我們網(wǎng)站視頻格式 是m3u8的時候, 有一個專門存放所有ts視頻片段的文件
2.代碼實現(xiàn)步驟
- 發(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)容
實現(xiàn)代碼
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)
到此這篇關(guān)于Python實現(xiàn)視頻下載與合成的示例代碼的文章就介紹到這了,更多相關(guān)Python視頻下載 合成內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python開發(fā)畢設(shè)案例之桌面學生信息管理程序
畢業(yè)設(shè)計必備案例:Python開發(fā)桌面程序2021-11-11
教你如何使用Python開發(fā)一個釘釘群應(yīng)答機器人
在聊天工具大肆侵入我們生活各個方面的今天,各種消息無時無刻不在侵擾我們的每一寸時間,這種情況下,一個聊天的機器人就很有必要了.今天,我們來學習一下使用 Python 開發(fā)一個釘釘?shù)膽?yīng)答機器人,助你「人生苦短,少回消息」,需要的朋友可以參考下2021-06-06
python中SSH遠程登錄設(shè)備的實現(xiàn)方法
本文主要介紹了python中SSH遠程登錄設(shè)備,python中支持SSH協(xié)議的模塊主要有Paramiko和netmiko兩種,本文主要介紹了netmiko模塊,具有一定的參考價值,感興趣的可以了解一下2022-04-04
Windows環(huán)境打包python工程為可執(zhí)行程序的詳細過程
我的開發(fā)環(huán)境是windows7,然后系統(tǒng)是64位,安裝的python和wxpython都是32位的,本文記錄我怎樣用pyinstaller打包我用python開發(fā)的工程,在網(wǎng)上搜索了很多資源,基本上都是不全的,所以我在這兒記錄一下這個比較完整的過程,一起看看吧2024-01-01
Python數(shù)據(jù)模型與Python對象模型的相關(guān)總結(jié)
這篇文章主要介紹了Python數(shù)據(jù)模型與Python對象模型的相關(guān)總結(jié),幫助大家更好的理解和學習python,感興趣的朋友可以了解下2021-01-01
解決python3插入mysql時內(nèi)容帶有引號的問題
今天小編就為大家分享一篇解決python3插入mysql時內(nèi)容帶有引號的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03

