Python:如何下载 blob url 视频?

Posted

技术标签:

【中文标题】Python:如何下载 blob url 视频?【英文标题】:Python: How to download a blob url video? 【发布时间】:2018-06-10 14:35:57 【问题描述】:

我想使用 Python 脚本从网站下载视频,但是,该视频由如下的 blob URL 提供。

<video class="jw-video jw-reset" style="object-fit: fill;" jw-loaded="data" src="blob:https://xxxxxxx.com/f717096e-5e1a-42e1-8c3c-3ec777b5d478"></video>

【问题讨论】:

你试过了吗:***.com/questions/39517522/…? 您好,感谢您的评论。其实我的情况有点复杂。我首先使用 selenium 登录网站并获取 cookie,然后将会话 cookie 传递给 python。 def request(driver): s = requests.Session() cookies = driver.get_cookies() for cookie in cookies: s.cookies.set(cookie['name'], cookie['value']) return s req = request (浏览器)您能否详细说明一下如何在上述代码后保存视频?谢谢! 把所有有问题的信息。您还可以创建最小的工作示例。 这个问题相当不完整,可以改进。它可能以“不清楚”或“缺少minimal reproducible example”的形式关闭。 【参考方案1】:

在我遇到的情况下,我看到这些 blob:https://... URLS 的页面也提供 .m3u8 文件。这些有视频的真实链接,在许多单独的片段中。有时还有一个加密密钥。

但是,这些 .m3u8 文件的链接有时是由 javascript 生成的,并且在原始页面的源代码中不存在。因此,您可能需要使用浏览器的开发工具并在刷新包含视频的页面时查看网络选项卡,以便能够看到对这些 .m3u8 URL 的请求。

在我的例子中,youtube-dl(这是一个 Python 脚本)能够在给定 .m3u8 URL 时下载视频,并将其提供给 ffmpeg。

所以您可以尝试一下,然后在 youtube-dl source 中查看它是如何使用 Python 实现的。

【讨论】:

【参考方案2】:

可以使用以下 python 代码下载 Blob 视频 您必须从页面检查中获取主段 url,就像在给定的图像中一样,通过提到它的代码中的 url

import requests
import m3u8
import subprocess

master_url ='master_url_from_inspect_network' 
#past your page inspect request header

r = requests.get(master_url)
m3u8_master = m3u8.loads(r.text)
print(m3u8_master)
playlist_url =m3u8_master.data['playlists'][0]['uri']
play_r = requests.get(playlist_url)
m3u8_master_play = m3u8.loads(play_r.text)
m3_data=(m3u8_master_play.data)

m3_datas = m3_data['segments'][0]['uri']

with open('video.ts','wb') as fs:
    for segments in m3_data['segments']:
       uri = segments['uri']
       print(uri)
       r = requests.get(uri)
       fs.write(r.content)

subprocess.run(['ffmpeg','-i','video.ts','video.mp4'])

【讨论】:

【参考方案3】:

你不能“下载它”。 blob 是一个伪 url,表示内存中的缓冲区。它不指向服务器中的任何文件。 https://developer.mozilla.org/en-US/docs/Web/API/Blob

【讨论】:

但是真的不能访问缓冲区的内容吗? 不,但这是一个不同的问题。 “下载”意味着能够从另一个进程访问内容,这是不可能的。保存 blob 很简单。谷歌可以比我更快地回答这个问题。但是,如果您不拥有服务器,则需要将 JS 引入运行页面。 @szatmary,我一直在尝试在谷歌扩展中解决这个问题,我已经尽我所能在谷歌上搜索,但我想我的搜索技巧已经付出了代价。我一直无法找到解决方案。你能给我指个方向吗? 当然。首先使用 MSE 实现一个播放器,以便您了解它的工作原理,然后从那里向后工作。 “谷歌可以比我更快地回答这个问题”谷歌把我带到了这里......【参考方案4】:

您可以为此使用urllib2

import urllib2
response = urllib2.urlopen('http://www.example.com/')
html = response.read()

【讨论】:

以上是关于Python:如何下载 blob url 视频?的主要内容,如果未能解决你的问题,请参考以下文章

解码 facebook 的 blob 视频 url

Javascript 视频 blob 和渐进式下载

导航到 url 时始终下载 Azure Blob

了解 blob url 视频流

当 url 是 blob url 时,html5 下载属性不起作用

如何通过 URL 下载 Azure BLOB 存储文件