使用 R Loop 批量下载带有 youtubecaption 的 Youtube 脚本
Use R Loop to Bulk Download Youtube Transcripts with youtubecaption
我正在尝试使用 youtubecaption
库下载播放列表的所有转录本,然后创建包含所有结果的数据框。
我有一个视频 URL 列表,并尝试创建一个 for 循环以将它们传递给 get_caption()
函数。我只能将一个视频的成绩单添加到 df。
我尝试了几种方法:
vids <- as.list(mydata$videoId)
for (i in 1:length(vids)){
vids2 <- paste("https://www.youtube.com/watch?v=",vids[i],sep="")
test_transcript2 <-
get_caption(
url = vids2,
language = "en",
savexl = FALSE,
openxl = FALSE,
path = getwd())
rbind(test_transcript, test_transcript2)
}
同样使用主数据框的列:
captions <- sapply(mydata[,24], FUN = get_captions)
有没有有效的方法来完成这个?
在您的代码中,您执行了 rbind(test_transcript, test_transcript2)
但从未分配它 ,因此它永远丢失了。当我们将其与我关于不使用 rbind(old, newrow)
范例的评论结合起来时,您的代码可能是
vids <- as.list(mydata$videoId)
out <- list()
for (i in 1:length(vids)){
vids2 <- paste("https://www.youtube.com/watch?v=",vids[i],sep="")
test_transcript2 <-
get_caption(
url = vids2,
language = "en",
savexl = FALSE,
openxl = FALSE,
path = getwd())
out <- c(out, list(test_transcript2))
}
alldat <- do.call(rbind, out)
其他一些提示:
如果功能化,for (i in 1:length(.))
可能是一种不好的做法,最好使用 for (i in seq_along(vids))
我们永远不需要索引号本身,我们可以使用for (vid in vids)
我们可以一次完成 paste
ing,通常 R 更快,使用 for (vid in paste0("https://www.youtube.com/watch?v=", vids))
,然后 url=vid
调用 get_caption
尽管如此,使用 lapply
可能更简单:
path <- getwd()
out <- lapply(paste0("https://www.youtube.com/watch?v=", vids),
get_caption, language = "en", savexl = FALSE,
openxl = FALSE, path = path)
do.call(rbind, out)
(注意:未经测试。)
我正在尝试使用 youtubecaption
库下载播放列表的所有转录本,然后创建包含所有结果的数据框。
我有一个视频 URL 列表,并尝试创建一个 for 循环以将它们传递给 get_caption()
函数。我只能将一个视频的成绩单添加到 df。
我尝试了几种方法:
vids <- as.list(mydata$videoId)
for (i in 1:length(vids)){
vids2 <- paste("https://www.youtube.com/watch?v=",vids[i],sep="")
test_transcript2 <-
get_caption(
url = vids2,
language = "en",
savexl = FALSE,
openxl = FALSE,
path = getwd())
rbind(test_transcript, test_transcript2)
}
同样使用主数据框的列:
captions <- sapply(mydata[,24], FUN = get_captions)
有没有有效的方法来完成这个?
在您的代码中,您执行了 rbind(test_transcript, test_transcript2)
但从未分配它 ,因此它永远丢失了。当我们将其与我关于不使用 rbind(old, newrow)
范例的评论结合起来时,您的代码可能是
vids <- as.list(mydata$videoId)
out <- list()
for (i in 1:length(vids)){
vids2 <- paste("https://www.youtube.com/watch?v=",vids[i],sep="")
test_transcript2 <-
get_caption(
url = vids2,
language = "en",
savexl = FALSE,
openxl = FALSE,
path = getwd())
out <- c(out, list(test_transcript2))
}
alldat <- do.call(rbind, out)
其他一些提示:
-
如果功能化,
for (i in 1:length(.))
可能是一种不好的做法,最好使用for (i in seq_along(vids))
我们永远不需要索引号本身,我们可以使用
for (vid in vids)
我们可以一次完成
paste
ing,通常 R 更快,使用for (vid in paste0("https://www.youtube.com/watch?v=", vids))
,然后url=vid
调用get_caption
尽管如此,使用
lapply
可能更简单:path <- getwd() out <- lapply(paste0("https://www.youtube.com/watch?v=", vids), get_caption, language = "en", savexl = FALSE, openxl = FALSE, path = path) do.call(rbind, out)
(注意:未经测试。)