我有一个df,其中包含一组来自YT的视频I:
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:
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。
你能建议怎么把它弄对吗?
提前感谢您的帮助。
发布于 2021-01-12 08:59:50
@perl我修改df以包含两个导致两种错误类型的URL:
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的定义:
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到达第一个错误时,我得到了输出:
TypeError: 'NoneType' object is not subscriptable在此之后,我将代码中的'forcedescription‘替换为’that _info‘:
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’列中没有任何错误。
有什么建议吗?
发布于 2021-01-11 16:10:28
您可以使用extract_info方法:
df['description'] = [
youtube_dl.YoutubeDL().extract_info(
u, download=False)['description'] for u in URL]
df输出:
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。
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]https://stackoverflow.com/questions/65670150
复制相似问题