在搜索了很长时间之后,我刚刚发现 yt-dlp(我已经安装并每天使用它来下载 YouTube(和其他)视频)支持获取用户评论并将其保存为 JSON 文件。
但令人沮丧的是,我找不到任何选择仅有的这样做,同时不下载视频。怎么做到的?可能吗?如果不可能,那真是太遗憾了,因为这是一个很棒的“独立”功能,我经常想在不下载大量视频文件的情况下使用它。我自己几乎不可能实现,因为 YouTube 让阻止机器人/自动化变得极其困难和复杂。
我已经看了这本手册很长时间了:https://github.com/yt-dlp/yt-dlp
答案1
--dump-single-json (or simply -J)
您可以使用或使用参数转储 JSON --no-download
。
# writes info.json in working dir
yt-dlp --write-comments --no-download "$url"
# dump complete JSON with comments
yt-dlp --write-comments --dump-single-json -o "$file" "$url"
yt-dlp --write-comments --dump-single-json "$url" > "$file"
# Pretty print with JQ (JSON processor, package needs to be installed)
yt-dlp --write-comments --dump-single-json "$url" | jq
yt-dlp --write-comments --dump-single-json "$url" | jq > "$file"
然后使用JQ查询评论。
jq '.comments' "$file" > comments_only.json # file input
jq '.comments' <<<"$json" > comments_only.json # var input
或者
some_command | jq '.comments'
.comments
是此处 JSON 属性“评论”的 JQ 选择器。
如果您想将使用 JQ 隔离的那些注释集成到另一个 JSON 文件中,JQ 方法会变得更加复杂。
这里有一个例子,我通过这些条目来推动你前进,以防你选择走这条路线。
old_json=$(jq '.' "$json_file")
entries=$(jq -s '.[0].entries += .[1].entries | .[0].entries | sort_by(.date) | reverse' <<<"$old_json" <<<"$json")
json=$(jq -s '.[0].entries = .[1] | .[0]' <<<"$old_json" <<<"$entries")
答案2
yt-dlp
有一个名为的选项--skip-download
,对我来说似乎有用。以下是文档:
--skip-download Do not download the video but write all related files (Alias: --no-download)
答案3
我也查看了 yt-dlp 的文档,似乎没有只下载评论的选项。你可以向开发人员建议此功能。
如果你喜欢编程,你可以使用 YouTube 数据 API 亲自获取评论。
文章 提取并预处理 YouTube 评论 包含详细的解释以及用于提取注释并将其写出为 CSV 文件的 Python 代码。它还包含有关清除冗余字符(例如表情符号)和语言检测(如果您只想要英文注释)的建议。
答案4
我正在使用 --get-description。它会下载视频的描述,而不是用户评论。
这是 YouTube-dl 的一个选项,并且它仍然在 yt-dlp 中起作用。