【问题标题】:Python: How to download a blob url video?Python:如何下载 blob url 视频?
【发布时间】: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>

【问题讨论】:

  • 您好,感谢您的评论。其实我的情况有点复杂。我首先使用 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”的形式关闭。

标签: python html video python-requests blob


【解决方案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()
      

      【讨论】:

        猜你喜欢
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 2018-05-29
        • 2015-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多