首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当youtubeDL无法下载视频时,继续下载后续视频

当youtubeDL无法下载视频时,继续下载后续视频
EN

Stack Overflow用户
提问于 2016-02-04 18:13:22
回答 2查看 2.7K关注 0票数 4

我正在尝试开发一个python脚本来下载一堆youtube视频,这些视频是使用youtube-dl模块从csv文件输入的。当下载单个视频失败时,脚本停止。我需要脚本继续下载下一个视频忽略无法下载的视频。有人能帮我讲讲如何在python中处理这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2016-02-04 21:59:32

如果您正在使用youtube-dl命令,则可以使用--ignore-errors flag

如果使用的是python中的youtube_dl模块,则必须使用ignoreerrors parameter

代码语言:javascript
复制
from __future__ import unicode_literals
import youtube_dl

ydl_opts = {'ignoreerrors': True}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['<URL>'])
票数 8
EN

Stack Overflow用户

发布于 2016-12-13 02:03:53

我意识到这是一个古老的问题,但这个问题突然出现在我面前,我找到了一个简单的解决方案。

我认为这里的问题是youtube_dl正在捕获任何出现的错误,然后通过它自己的内部消息输出例程来报告它们,所以在它到达调用代码之前,异常就被“消费”了。这可能适用于命令行实用程序,但在本机python代码中使用它时会产生障碍。幸运的是,youtube_dl的开发人员为我们提供了一种截获错误消息并对其进行处理的方法,而无需使用youtube_dl内部机制。不幸的是,它们在解释和示例方面都很少,但是如果你查看自述文件的“开发人员说明”,就会发现有一个自定义记录器类的示例。

只需稍作修改,我们就可以使用这个类来存储错误消息(或警告,等等),然后检查它们,而不是使用try/except块:

代码语言:javascript
复制
class MyLogger(object):

def __init__(self):
    self._message_queue = []

def debug(self, msg):
    print('[DEBUG]' + msg)

def warning(self, msg):
    pass

def error(self, msg):
    self._message_queue.append(msg)
    print(msg)

def get_message(self):
    return None if not len(self._message_queue) else \
           self._message_queue.pop()

导入记录器类,实例化它,并将其作为参数传递到youtube_dl的选项字符串中。

代码语言:javascript
复制
import mylogger
...
loggr = mylogger.MyLogger()
...
ydl_opts = { 'logger': loggr }

现在,当需要根据出现的错误采取操作时,您可以检查记录器对象中的消息队列,看看是否有什么事情要做:

代码语言:javascript
复制
possible_error = loggr.get_message()
if possible_error is None:
    #do normal code
else:
    #check the content of the error string and do something with it.

希望这对某些人有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35198155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档