大家好,我是Python进阶者。
一、前言
前几天在Python最强王者交流群有个叫【顽皮Dolly】的粉丝问了一个Python网络爬虫的问题,抓取亚马逊商品视频,这里拿出来给大家分享下,一起学习下。
二、解决过程
这里【皮皮】给出了解答,一起来看看吧。
使用浏览器抓包发现,这个视频是m3u8
格式的。m3u8
是苹果公司推出的视频播放标准,是m3u
的一种,只是编码格式采用的是UTF-8
。
找到Url,就可以处理了。
其实关于m3u8
格式的视频下载,网上已经有很多教程了,也有人做出了小工具,可以直接拿过来用,也是非常卷了!这里使用【吴老板】写的小教程来演示。
【吴老板】的小教程链接:https://github.com/PY-GZKY/python-automation-docs/blob/master/docs/爬虫/m3u8音视频拼接.md
里边的代码可以直接拿过来用,核心代码如下:
代码语言:javascript复制import datetime
import time
import os
import requests
# m3u8是本地的文件路径
def get_ts_urls(m3u8_path):
urls = []
with open(m3u8_path, "r") as file:
lines = file.readlines()
for line in lines:
if line.endswith(".tsn"):
print(line)
urls.append("https://m.media-amazon.com/images/S/vse-vms-transcoding-artifact-us-east-1-prod/084028a2-9a64-485f-a55b-676577059927/" line.strip("n"))
return urls
def download(ts_urls, download_path):
for i in range(len(ts_urls)):
ts_url = ts_urls[i]
file_name = ts_url.split("/")[-1]
print("开始下载 %s" % file_name)
try:
response = requests.get(ts_url, stream=True, verify=False)
except Exception as e:
print("异常请求:%s" % e.args)
return
ts_path = download_path "/{0}.ts".format(i)
with open(ts_path, "wb ") as file:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
file.write(chunk)
time.sleep(.56)
def file_walker(path):
file_list = os.listdir(path)
# file_list.sort()
file_list.sort(key=lambda x: int(x[:-3]))
file_list_ = []
for fn in file_list:
# print(fn)
p = str("tsfiles" '/' fn)
file_list_.append(p)
print(file_list_)
return file_list_
def combine(ts_path, file_name):
file_list = file_walker(ts_path)
file_path = file_name '.MP4'
with open(file_path, 'wb ') as fw:
for i in range(len(file_list)):
fw.write(open(file_list[i], 'rb').read())
if __name__ == '__main__':
urls = get_ts_urls("./data.txt")
download(urls, "tsfiles")
combine("tsfiles", "大理")
这个是依次下载的ts
文件,都是一个个几秒的小文件。
之后使用【吴老板】小教程上的合并combine()
函数对这些ts
文件进行合并,得到一个mp4
文件,如下图所示。
后来【孤独】大佬提出还可以使用ffmpeg
库进行下载,使用命令:ffmpeg -allowed_extensions ALL -i m3u8链接 -c copy 输出视频
,感兴趣的小伙伴们也可以试试看,方法还是很多的。
三、总结
大家好,我是Python进阶者。这篇文章主要分享了Python下载m3u8格式视频的问题,针对该问题给出了具体的解析和代码演示,帮助粉丝顺利解决了问题。
最后感谢粉丝【顽皮Dolly】提问,感谢【皮皮】、【吴老板】、【孤独】给出的具体解析和代码演示,感谢【dcpeng】、【冯诚】、【冷喵】、【阿策~】、【瑜亮老师】等人参与学习交流。