非常多时候你想下载视频无下载按钮,那样你该怎么做呢?Python学习完以后你能够经过Python下载这些视频。今天就分享一下m3u8视频怎样用Python下载。
查询视频
找到视频的源文件,这是你要抓取文件的第1步。此时,你会发掘浏览器的研发者工拥有多么棒!
电脑浏览器打开要下载电影的页面,按下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(rhttp://\w+.+|https://\w+.+)
# 创建ts文件次序文件
with open(f{lfile}, a, encoding=utf-8) as w:
for i in ts_file:
try:
# 查询所有的ts文件名
w.write(ffile {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(rhttp://\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:
passmp4_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)
|