00:00:00当你需要为 RAG 构建爬虫时,问题不在于获取数据,
00:00:03而在于清洗数据。
00:00:04JavaScript 会导致出错,HTML 结构混乱,
00:00:07我们总是在浪费时间试图让数据能被 LLM 使用。
00:00:11解决这个问题的方案就是 CrawlForAI。
00:00:13它是专为 AI 打造的,支持异步操作,
00:00:15能处理 JavaScript,并输出干净的 Markdown 或 JSON,
00:00:18它的运行速度比 Scrapy 等传统 Python 爬虫快达六倍。
00:00:23我们能以史无前例的速度获取模型就绪的数据。
00:00:26它是如何运作的?又有什么不同之处?
00:00:29这些就是我们要探讨的问题。
00:00:30[音乐]
00:00:35那么 CrawlForAI 到底是什么?
00:00:37乍一看,它似乎只是另一个 Python 爬虫,
00:00:40但它不是为了爬取而生,而是为了 AI 打造。
00:00:43区别就在这里。
00:00:44大多数爬虫提供的是原始 HTML,
00:00:46而 CrawlForAI 提供的是干净的 Markdown 或结构化的 JSON,可直接供 LLM 使用。
00:00:52它利用 Playwright 处理 JavaScript,
00:00:54它以异步方式运行,因此具有良好的扩展性,
00:00:57它还有预取模式,当你只需要链接时,可以跳过繁重的渲染。
00:01:01这一点非常重要,因为如果我们正在构建聊天机器人、
00:01:04助手或这些智能体,我们的核心问题不是爬取,
00:01:08而是如何将混乱的网页数据转化为可用的数据。
00:01:11CrawlForAI 能够快速解决这整个难题。
00:01:15如果你喜欢这类内容,请务必订阅。
00:01:18我们一直会有新视频推出。
00:01:20让我们从简单的开始。这是我运行的一个最基础的爬虫。
00:01:23这里的大部分内容都来自他们的仓库和文档,
00:01:25我只是稍微修改了几行代码让它运行起来。
00:01:28我导入了 AsyncWebCrawler,它负责处理 AI 流水线中的异步网络请求。
00:01:34然后我对一个科技新闻 URL 调用了 run 方法,仅此而已。
00:01:38现在看看这个输出。
00:01:40我们得到的不是原始 HTML,
00:01:43而是干净的 Markdown 和 JSON。
00:01:45标题井然有序,链接得以保留,
00:01:47在底层,它获取页面,
00:01:50解析 DOM,去除噪音,
00:01:52并对内容进行排序,这样我们就能保留核心信息,去除那些多余的废话。
00:01:57现在,如果我们需要构建一个新闻摘要器或 RAG 原型,
00:02:02我们不需要编写清洗脚本,
00:02:04只需将这些数据直接传递给你的模型即可。
00:02:07我本以为这和其他爬虫工具一样只是负责抓取,
00:02:11但实际上我们得到的是已经预处理好的数据。
00:02:14这种跨越就是节省下来的时间。
00:02:17现在,接下来的内容会变得更有趣。
00:02:19在我试用它的时候,
00:02:20你可能会认为渲染每个页面是必须的。
00:02:23事实并非如此。请看这个。
00:02:25这是同一个爬虫,
00:02:27但现在我们将 prefetch 设置为 true。
00:02:30我要爬取 Hacker News。
00:02:31看看这运行速度有多快?
00:02:33它运行的速度简直快得惊人。
00:02:35它不是渲染每个页面,
00:02:37而是先抓取链接,
00:02:38仅仅通过异步抓取实现。
00:02:39如果你在构建聚合器,这非常管用。
00:02:42我们先找到我们需要的内容,
00:02:44之后再进行提取。
00:02:45你不需要爬取所有内容,
00:02:47只需要我们需要的部分。
00:02:48当你处理成百上千个 URL 时,
00:02:50这种差异会体现在效率的巨大提升上。
00:02:52现在,让我们多谈谈生产端的内容。
00:02:55我将使用 BFS 深度爬取策略运行一次深度爬取。
00:02:58这是他们版本的广度优先搜索方案。
00:03:01然后我在这里定义了恢复状态,
00:03:03并添加了一个状态更改回调函数。
00:03:07我准备开始爬取,
00:03:08然后我会杀掉这个进程。
00:03:10大多数工具在你杀掉进程后,
00:03:13它们都会重新开始。
00:03:14但当我重新运行这个时,请看,
00:03:16它会使用保存的 JSON 状态重新启动,
00:03:19并且在不丢失任何进度的情况下从上次中断的地方继续。
00:03:22所以在构建大型 RAG 知识库时,
00:03:24程序崩溃并不可怕。
00:03:26通常情况下,重新开始是很昂贵的。
00:03:29但在这里,它可以无缝衔接。
00:03:30现在,大多数爬虫无法做到的是语义提取。
00:03:35如果我用 Pydantic 定义一个模式,
00:03:37包含职位名称、公司、薪资,
00:03:39然后我要爬取 Indeed 网站。
00:03:40接着我配置他们的 LLM 提取策略类,
00:03:44包括指令和提供商。
00:03:46我将在 Indeed 这个
00:03:48招聘网站上运行它,
00:03:49看看这个输出。
00:03:51效果真的非常好。
00:03:52带有清晰字段的结构化 JSON,
00:03:54这就是正在发生的事情。
00:03:56CrawlForAI 会转换页面,
00:03:58正如我所说,Markdown 或 JSON 任你选择。
00:04:01然后它会将其发送给模型。
00:04:03模型会根据你的模式对其进行结构化处理。
00:04:06它不是在爬取文本,
00:04:07而是在提取我们想要的信息。
00:04:09现在的 LLM 可以轻松处理这些。
00:04:11对于 LLM 类型的工具来说,这完全是另一个层次的能力。
00:04:15刚才的内容很酷,
00:04:16但让我们先跳出来宏观地看一下。
00:04:18这里的优点是:它很快。
00:04:20它真的很快,基准测试显示最高可快六倍。
00:04:22它能自动处理 JavaScript。
00:04:24它是异步且可扩展的,
00:04:26并且在崩溃后可以恢复。
00:04:28但最大的亮点是,
00:04:29它直接集成了 LLM。
00:04:32此外,它是开源的。
00:04:33我只需要用 pip 安装它,就可以运行了。
00:04:35当然,就像任何事物一样,
00:04:36它也有一些权衡。
00:04:38它仅支持 Python,对吧?
00:04:39你可能在使用 Python,也可能没有。
00:04:41这可能是一个缺点。
00:04:42除非你运行像 Ollama 这样的本地模型,否则 LLM 功能需要 API 密钥。
00:04:46爬取行为仍然可能触发布速限制,
00:04:49而且像任何快速发展的开源项目一样,
00:04:51你必须不断更新它,对吧?
00:04:53更新正在不断发布中。
00:04:54但对于专注于 AI 的开发者来说,
00:04:56它解决了许多痛点,对吧?
00:04:58特别是在这些 RAG 流水线中。
00:05:00现在,让我们把它和你可能已经在使用的工具对比一下。
00:05:03Scrapy,如果你是从 Python 转向这方面的,
00:05:05它非常适合大规模的静态页面爬取,
00:05:07但它是基于规则的,而且模板代码非常沉重。
00:05:10老实说,设置它需要花费很多时间。
00:05:13如果你想要对 Markdown 输出进行 LLM 提取,
00:05:16你需要构建自定义层。
00:05:17而使用 CrawlForAI,这些都是内置的。
00:05:19还有 Beautiful Soup。
00:05:21它非常轻量,但也太简单了,
00:05:23它本质上只是一个解析器。
00:05:25没有爬取引擎,
00:05:26也没有 JavaScript 渲染。
00:05:28你最终只能把一堆东西拼凑在一起。
00:05:31然后,当然还有大名鼎鼎的 Selenium。
00:05:33它确实能渲染 JavaScript,对吧?
00:05:36但它速度较慢,而且需要更多手动操作。
00:05:38扩展异步工作流仍然会非常痛苦。
00:05:42CrawlForAI 在内部封装了 Playwright,
00:05:44并暴露了一个简洁的异步 API。
00:05:46如果你只是为了静态数据构建传统的基于规则的爬虫,
00:05:48那你现有的工具其实就已经足够好了。
00:05:49老实说,它们没问题。
00:05:52但如果你正在构建 AI 系统、
00:05:54RAG 流水线或自主智能体,
00:05:56CrawlForAI 是专为这种应用场景而生的,
00:06:00它确实是一个非常酷的 AI 工具。
00:06:02它不只是爬取页面,它还在处理数据,
00:06:04准备 LLM 所需的内容。
00:06:06这就是 CrawlForAI。
00:06:08如果你对 AI 感兴趣,这绝对值得一试。
00:06:11它的速度非常快,我真的被惊到了。
00:06:14这真的很酷,
00:06:15如果我们正在构建这些 RAG 风格的流水线,
00:06:17我们可以将数据干净地推送到我们的 LLM 中。
00:06:20我们下个视频再见。