首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >youtube_dl视频描述

youtube_dl视频描述
EN

Stack Overflow用户
提问于 2021-01-11 15:51:53
回答 2查看 247关注 0票数 0

我有一个df,其中包含一组来自YT的视频I:

代码语言:javascript
复制
import pandas as pd

data = {'Order':  ['1', '2', '3'],
        'VideoID': ['jxwHmAoKte4', 'LsXM502SpiU','1I3f27iQ4pM']
        }

df = pd.DataFrame (data, columns = ['Order','VideoID'])

print (df) 

并希望下载视频描述,并将它们保存在另一列中的同一个df中。

我试着在木星中使用youtube_dl:

代码语言:javascript
复制
import youtube_dl

def all_descriptions(URL):
    videoID=df['VideoId']
    URL = 'https://www.youtube.com/watch?v=' + videoID
    ydl_opts = {
    'forcedescription':True,
    'skip_download': True,
    'youtube-skip-dash-manifest': True,
    'no_warnings': True,
    'ignoreerrors': True
    }
   
    try:
        youtube_dl.YoutubeDL(ydl_opts).download(URL)
        return webpage

except:
    pass

df['descriptions']=all_descriptions(URL)

我将代码的输出看作文本,但在df中,只有"None“作为列的文本。

显然,我无法以正确的方式将函数的输出传输到df。

你能建议怎么把它弄对吗?

提前感谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-12 08:59:50

@perl我修改df以包含两个导致两种错误类型的URL:

代码语言:javascript
复制
import pandas as pd

data = {'Order':  ['1', '2', '3', '4', '5'],
        'VideoId': ['jxwHmAoKte4', 'LsXM502SpiU','1I3f27iQ4pM', 'MGQOX2rK5s', 'wNayw_E7lIA']
        }

df = pd.DataFrame (data, columns = ['Order','VideoId'])

print (df)

然后,我按照建议的方式测试它,包括我对ydl_opts的定义:

代码语言:javascript
复制
videoID=df['VideoId']
URL = 'https://www.youtube.com/watch?v=' + videoID
ydl_opts = {
    'forcedescription':True,
    'skip_download': True,
    'youtube-skip-dash-manifest': True,
    'no_warnings': True,
    'ignoreerrors': True
    }
    
df['description'] = [
    youtube_dl.YoutubeDL(ydl_opts).extract_info(
        u, download=False)['description'] for u in URL]

df

到达第一个错误时,我得到了输出:

代码语言:javascript
复制
TypeError: 'NoneType' object is not subscriptable

在此之后,我将代码中的'forcedescription‘替换为’that _info‘:

代码语言:javascript
复制
def all_descriptions(URL):
    videoID=df['VideoId']
    URL = 'https://www.youtube.com/watch?v=' + videoID
    ydl_opts = {
    'forcedescription':True,
    'skip_download': True,
    'youtube-skip-dash-manifest': True,
    'no_warnings': True,
    'ignoreerrors': True
    }
   
    try:
        youtube_dl.YoutubeDL(ydl_opts).download(URL)
        return webpage
    
    except:
        pass

它跳过所有错误,但结果是‘description’列中没有任何错误。

有什么建议吗?

票数 0
EN

Stack Overflow用户

发布于 2021-01-11 16:10:28

您可以使用extract_info方法:

代码语言:javascript
复制
df['description'] = [
    youtube_dl.YoutubeDL().extract_info(
        u, download=False)['description'] for u in URL]

df

输出:

代码语言:javascript
复制
  Order      VideoID                                        description
0     1  jxwHmAoKte4  Bundesweit gelten sie nun ab heute, die schärf...
1     2  LsXM502SpiU  Wie sicher ist der Impfstoff? Wäre eine Impfpf...
2     3  1I3f27iQ4pM  Impfen ja oder nein, diese Frage stellen sich ...

forcedescription参数只将描述输出到标准输出,而不返回它

更新:如果 extract_info失败,则返回None,因此,如果在获取信息之前有可能失败的视频,我们可以检查该信息是否为None

代码语言:javascript
复制
ydl = youtube_dl.YoutubeDL(ydl_opts)
infos = [ydl.extract_info(u, download=False) for u in URL]
df['description'] = [
    info['description'] if info is not None else ''
    for info in infos]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65670150

复制
相关文章

相似问题

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