youtube-rag-scraper
rav4nn/youtube-rag-scraper加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有过这样的经历:想找某个 YouTube 博主三个月前讲的一个技术细节,翻了半天视频列表、看了无数个时间戳,就是找不到那段话?或者追着一个系列课程看了十几集,回头想复习某个概念,发现自己只记得"大概在第三集中间"?
rav4nn/youtube-rag-scraper 就是来解决这个问题的。它是一个生产级的命令行工具,能够批量抓取 YouTube 频道的所有视频、提取字幕文本,然后借助 RAG(检索增强生成)技术,在本地构建一个语义向量数据库,让你用自然语言提问,直接搜到视频里讲过的相关段落——甚至可以精确到"哪一集的第几分钟"。
<p align="center"> <img src="https://raw.githubusercontent.com/rav4nn/youtube-rag-scraper/main/assets/demo_search.png" alt="语义搜索演示" width="750"> </p>AI 时代,大语言模型(LLM)的知识来自预训练数据,有明显的天花板。你无法让 ChatGPT 回答"某个 YouTube 频道上周刚发布的内容",因为那根本不在它的训练语料里。
与此同时,YouTube 已经成为全球最大的知识学习平台之一——从深度技术教程到哲学思辨,从烘焙技巧到量子力学,几乎每个领域都有大量优质视频内容。但视频的检索能力极弱:平台只支持标题关键词搜索,无法语义理解内容。
这个项目的作者 rav4nn 敏锐地捕捉到了这个痛点:如果能把 YouTube 视频的语音内容提取出来,建立一个本地的向量知识库,再用 LLM 进行语义检索——那不就等于给每个频道建立了一个私有化的、可持续更新的 AI 知识库?
这就是 youtube-rag-scraper 的核心价值。
整个技术链路设计得相当清晰,分四个阶段:
第一阶段:元数据采集
通过 YouTube Data API v3,按照频道 Handle(如 @jameshoffmann)自动解析该频道下的所有视频 ID、标题、上传时间、播放量等元数据。metadata.py 模块负责这个环节。
第二阶段:字幕提取 使用 yt-dlp 并行抓取每个视频的自动字幕(YouTube Auto-Captions),解析 VTT 格式,转成纯文本。transcripts.py 模块处理这一步。
第三阶段:RAG 分块与向量化
utils.py 对字幕文本进行分块(chunking),生成结构化的 JSONL 数据集。随后 knowledge_base.py 调用 sentence-transformers 的 all-MiniLM-L6-v2 模型(384 维向量),将每段文字编码为向量,存入 FAISS 索引。
音频/字幕文本 → 分块 → Embedding (all-MiniLM-L6-v2) → FAISS 向量索引
第四阶段:语义问答 search.py 支持自然语言提问,自动加载 FAISS 索引,检索最相关的 Top-K 文本片段,并附带视频来源信息(频道名、视频标题、时间戳)。
除了直接问答,项目还支持将数据集导出为 JSON / JSONL / CSV / Parquet 四种格式,方便后续在数据管道中进一步处理。
| 层级 | 技术选型 | 说明 |
|---|---|---|
| 数据采集 | google-api-python-client + yt-dlp | YouTube 官方 API 获取元数据,yt-dlp 提取字幕 |
| 向量化 | sentence-transformers | all-MiniLM-L6-v2:轻量高性能的句子嵌入模型 |
| 向量检索 | faiss-cpu | Facebook 开源的最近邻搜索库,支持 L2 距离精确检索 |
| 数据导出 | pandas + pyarrow | 支持 Parquet 列式存储 |
| 运行环境 | Python 3.10+ / CLI | 无 Web 界面,通过命令行参数驱动 |
整个项目是纯 Python CLI 工具,代码量不大(核心模块 7 个 Python 文件),但每一行都服务于一个清晰的数据处理目标,代码质量不错。
安装很简单:
pip install -r requirements.txt
# 需要预先配置 YOUTUBE_API_KEY 环境变量
export YOUTUBE_API_KEY="你的密钥"
然后抓取频道:
python -m youtube_scraper.main --channel "@jameshoffmann" --knowledge-base --workers 4
用自然语言提问:
python -m youtube_scraper.main --ask "How does espresso extraction work?"
返回结果会包含相关视频片段、出处视频标题和相关性评分。整个流程对于有 Python 使用经验的人来说,上手门槛不高。
局限性也是明显的:
随着 AI 应用深化,"如何让 LLM 访问最新信息" 成为热门课题。RAG(检索增强生成)正是当前的主流解法之一。这个项目用 YouTube 视频作为 RAG 数据源,是一个很有启发性的思路。
可以想象几个扩展方向:
YouTube Knowledge Engine 是一个小而美的 AI 数据管道工具。它没有复杂的架构,但精准地解决了一个真实痛点——让 YouTube 视频内容变得可检索、可问答。如果你有持续学习的习惯,或者需要追踪某些领域的视频内容更新,这个工具值得一试。缺点是缺乏图形界面、依赖自动字幕质量,适合有命令行使用经验的用户。
本报告基于 GitHub 公开数据生成,图片均来自项目官方仓库。