网站首页 > 基础教程 正文
很多时候你想下载视频没有下载按钮,那么你该怎么做呢?Python学习完以后你可以通过Python下载这些视频。今天就分享一下m3u8视频如何用Python下载。
查找视频
找到视频的源文件,这是你要抓取文件的第一步。这时,你会发现浏览器的开发者工具有多么棒!
电脑浏览器打开要下载电影的页面,按下F12打开浏览器开发工具,选择网络/Network,这里可以看到网站请求的所有数据
刷新页面,找到含有.m3u8的请求数据流,可以点击开发者工具栏,按ctrl+F查找.m3u8文件。然后打开标头/Headers,查看请求地址。
可以通过预览/Response查看.m3u8文件包含哪些数据,将这些地址复制下来,就是我们要下载的视频数据,这些视频一般都是.ts格式的,就是视频片段。你可以一条一条下载下来,但既然我们说了要用Python下载,那么,接下来的事情我们用代码实现。
ts视频下载
我们将预览内容Ctrl+A全选,然后复制,粘贴到新建的txt文件中,然后处理下载问题。
import re
# 读取文件,file就是保存复制内容的txt文件
# lfile是获得复制视频的顺序list_file
# dfile是要下载的视频链接 download_file
# url 是视频的url路径前缀
def read(file, lfile, dfile, url):
#读取复制内容
with open(f'./{file}', 'r+', encoding='utf-8') as r:
# 按行读取
ts_file = r.readlines()
# 正则模块,获取复制文件中的所有ts文件
re_ts = re.compile(r'\w+\.ts')
# 如果ts文件有?后带的参数,也要识别
re_ts_data = re.compile(r'\w+\.ts?\w+.+|\w+\.ts')
# 正则模块,url正则
re_ts_url = re.compile(r'http://\w+.+|https://\w+.+')
# 创建ts文件顺序文件
with open(f'{lfile}', 'a', encoding='utf-8') as w:
for i in ts_file:
try:
# 查找所有的ts文件名
w.write(f'file {re.findall(re_ts, i)[0]}\n')
except:
pass
# 创建ts下载文件
with open(f'{dfile}', 'a', encoding='utf-8') as f:
try:
# 创建下载文件时要在文件中添加url前缀
f.write(f'{url}{re.findall(re_ts_data, i)[0]}\n')
except:
pass
read('a.txt', 'list.txt', 'down.txt', 'https://www.xxx.com/')
这是对复制内容的处理,方便后面的继续进行,这时候我们得到了三个文件,一个是前面创建的txt文件,后面两个是程序运行时获得的文件。注意,如果要创建新的下载视频,这里要修改read()传入的参数。因为lfile和dfile的打开权限是'a',再次执行会在原来文件内继续添加内容,会造成之前的内容重复。
import os
import re
import wget # 这个库需要通过命令pip install wget下载
# 创建下载,dir是下载文件的文件夹名称,url是下载文件
def url_down(dir, url):
try:
# 创建文件夹
os.mkdir(dir)
except:
pass
# 下载文件
wget.download(url, out=f'./{dir}/')
if __name__ == '__main__':
# 读取down.txt文件中的ts视频的url
with open('down.txt', 'r+', encoding='utf-8') as r:
txt_list = r.readlines()
# 创建视频链接url的正则模块
url_get = re.compile(r'http://\w+.+|https://\w+.+')
for i in txt_list:
# 查找ts的url
k = re.findall(url_get, i)
# 因为文件中可能存在空行或者非url行,所以加个校验
if k == []:
pass
else:
# 下载
url_down('视频', k[0])
ts视频转mp4
当你执行完成后发现会有很多视频片段,不方便查看和使用,所以,我们要把这些ts视频片段合并成一整段的mp4视频格式。
这里用到一个工具--ffmpeg,一款非常好用处理音视频的工具包。
下载完成后,将文件解压,然后将bin文件的路径添加到系统环境中,命令行执行ffmpeg -version查看是否安装成功。
# 这是python一个终端操作工具
import subprocess
import os
def ts_mp4(filename):
ts_path = os.path.join(os.getcwd(), '视频/')
try:
os.mkdir('mp4视频')
except:
pass
mp4_path = os.path.join(os.getcwd(), 'mp4视频/')
cmdline = f"ffmpeg -f concat -i {ts_path}list.txt -c copy {mp4_path}{filename}.mp4"
subprocess.call(cmdline, shell=True)
print(f'{filename}视频转换成功!')
ts_mp4('new')
猜你喜欢
- 2024-10-12 python代码是如何执行的? python的代码如何运行
- 2024-10-12 deepin os下使用Geany编写python程序
- 2024-10-12 扩展和嵌入 Python 之重定向输出与编译
- 2024-10-12 python爬虫数据匹配-正则(re模块的用法)
- 2024-10-12 Python中的.pyc文件是干什么的呢?
- 2024-10-12 解锁 Python 中的正则表达式:轻松搞定文本处理
- 2024-10-12 Python 的底层 — 解释器和内存管理,你了解多少
- 2024-10-12 python程序执行原理 描述python程序执行原理
- 2024-10-12 这些 python 技巧,不知道就 out 了
- 2024-10-12 “挑战用 500 行 Python 写一个 C 编译器”
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)