Crawl4AI:开源的AI友好型网页爬虫与数据抓取工具

发布于:2025-08-06 ⋅ 阅读:(22) ⋅ 点赞:(0)

🚀🤖 Crawl4AI:开源的外链图片转存中…(img-PtoLd5XX-1753976207289)]

Crawl4AI是最受欢迎的开源项目之一,它提供了高速且AI友好的网页爬虫能力,专为大型语言模型(LLMs)、AI代理和数据管道设计。它是完全开源的,灵活且具备实时性能,开发者可以以无与伦比的速度、精确度和部署简易性进行开发。

✨ 查看最新版本更新 v0.7.0

🎉 版本 0.7.0现已推出! 该版本引入了「自适应智能更新」,提供了突破性的功能:自适应爬虫能够学习网站模式、无限页面的虚拟滚动支持、具有三层评分的智能链接预览、异步URL播种器实现大范围发现以及显著的性能提升。

🧐 为什么选择Crawl4AI?

  1. 专为LLMs设计:生成智能、简明的Markdown,优化用于RAG和微调应用。
  2. 快速高效:提供6倍于传统爬虫的实时、成本效益高的性能。
  3. 灵活的浏览器控制:提供会话管理、代理和自定义钩子,确保无缝的数据访问。
  4. 启发式智能:采用先进算法进行高效提取,减少对昂贵模型的依赖。
  5. 开源与可部署性:完全开源,无需API密钥,准备好进行Docker和云集成。
  6. 蓬勃发展的社区:由活跃的社区维护,现为GitHub上排名第一的项目。

🚀 快速开始

  1. 安装Crawl4AI
# 安装包
pip install -U crawl4ai

# 对于预发布版本
pip install crawl4ai --pre

# 运行安装后的设置
crawl4ai-setup

# 验证安装情况
crawl4ai-doctor

如果遇到与浏览器相关的问题,可以手动安装浏览器:

python -m playwright install --with-deps chromium
  1. 用Python运行简单的网页爬虫
import asyncio
from crawl4ai import *

async def main():
    async with AsyncWebCrawler() as crawler:
        result = await crawler.arun(
            url="https://www.nbcnews.com/business",
        )
        print(result.markdown)

if __name__ == "__main__":
    asyncio.run(main())
  1. 或使用新的命令行接口
# 基本爬取,输出Markdown格式
crwl https://www.nbcnews.com/business -o markdown

# 使用BFS策略深度爬取,最多10页
crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10

# 利用LLM提取与特定问题相关的信息
crwl https://www.example.com/products -q "提取所有产品价格"

✨ 特性

📝 Markdown生成

  • 🧹 干净的Markdown:生成结构化的Markdown,准确格式化。
  • 🎯 合适的Markdown:基于启发式的筛选,移除冗余和不相关部分,实现AI友好的处理。
  • 🔗 引用和参考:将页面链接转换为编号的参考列表,提供干净的引用。
  • 🛠️ 自定义策略:用户可以创建自己特定需求的Markdown生成策略。
  • 📚 BM25算法:使用BM25过滤提取核心信息,剔除无关内容。

📊 结构化数据提取

  • 🤖 LLM驱动的提取:支持所有LLMs(开源和专有),进行结构化数据提取。
  • 🧱 分块策略:实现基于主题、正则表达式和句子级别的分块处理。
  • 🌌 余弦相似度:根据用户查询找到相关内容块,用于语义提取。
  • 🔎 CSS基础提取:利用XPath和CSS选择器快速进行模式化数据提取。
  • 🔧 模式定义:定义自定义模式,根据重复模式提取结构化的JSON。

🌐 浏览器集成

  • 🖥️ 管理浏览器:使用用户拥有的浏览器,避免机器人检测。
  • 🔄 远程浏览器控制:连接到Chrome开发者工具协议,实现远程、大规模的数据提取。
  • 👤 浏览器配置器:创建和管理持久的配置文件,保存认证状态、cookie和设置。
  • 🔒 会话管理:保存浏览器的状态,重复使用,实现多步骤爬取。
  • 🧩 代理支持:无缝连接具备认证的代理,实现安全访问。
  • ⚙️ 完整的浏览器控制:修改头部、cookie、用户代理等,实现定制化爬取设置。
  • 🌍 多浏览器支持:兼容 Chromium、Firefox 和 WebKit。
  • 📐 动态视口调整:自动调整浏览器视口以匹配页面内容,确保完整渲染和捕获所有元素。

🔎 爬取与抓取

  • 🖼️ 媒体支持:提取图片、音频、视频及响应式图片格式,如srcsetpicture
  • 🚀 动态爬取:执行JS代码并等待异步或同步继续提取动态内容。
  • 📸 截图:在爬取过程中捕获网页截图,用于调试或分析。
  • 📂 原始数据爬取:直接处理原始HTML(raw:)或本地文件(file://)。
  • 🔗 全面链接提取:提取内部、外部链接及嵌入的iframe内容。
  • 🛠️ 可自定义钩子:在每一步定义钩子,定制爬虫行为。
  • 💾 缓存:缓存数据以提高速度并避免冗余抓取。
  • 📄 元数据提取:从网页提取结构化元数据。
  • 📡 iframe内容提取:无缝提取嵌入的iframe内容。
  • 🕵️ 懒加载处理:等待图像完全加载,确保没有内容因懒加载而错过。
  • 🔄 全页扫描:模拟滚动加载并捕获所有动态内容,适用于无限滚动页面。

🚀 部署

  • 🐳 Docker化设置:优化的Docker镜像,配有FastAPI服务器,方便部署。
  • 🔑 安全认证:内置JWT令牌认证,保障API安全。
  • 🔄 API网关:一键部署,配合安全令牌认证,适用于API工作流。
  • 🌐 可扩展架构:为大规模生产而设计,优化服务器性能。
  • ☁️ 云部署:为主要云平台准备的即可部署配置。

🔬 高级用法示例

本项目提供了丰富的示例,帮助用户充分利用其能力。以下是一些流行的用法示例:

生成干净的Markdown

import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig

async def main():
    browser_config = BrowserConfig(
        headless=True,
        verbose=True,
    )
    run_config = CrawlerRunConfig(
        markdown_generator=DefaultMarkdownGenerator()
    )

    async with AsyncWebCrawler(config=browser_config) as crawler:
        result = await crawler.arun(
            url="https://docs.example.com/",
            config=run_config
        )
        print(result.markdown)

if __name__ == "__main__":
    asyncio.run(main())

结构化数据提取

import asyncio
from crawl4ai import AsyncWebCrawler, JsonCssExtractionStrategy

async def main():
    schema = {
        "name": "Example Data",
        "baseSelector": "div.data-section",
        "fields": [
            {
                "name": "title",
                "selector": "h1",
                "type": "text",
            },
            {
                "name": "description",
                "selector": "p.description",
                "type": "text",
            },
        ]
    }

    extraction_strategy = JsonCssExtractionStrategy(schema)

    async with AsyncWebCrawler() as crawler:
        result = await crawler.arun(
            url="https://www.example.com/data",
            config=run_config
        )
        print(result.extracted_content)

if __name__ == "__main__":
    asyncio.run(main())

使用自己的浏览器

import os, asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig

async def main():
    user_data_dir = os.path.join("~", ".crawl4ai", "browser_profile")
    os.makedirs(user_data_dir, exist_ok=True)

    browser_config = BrowserConfig(
        headless=True,
        user_data_dir=user_data_dir,
        use_persistent_context=True,
    )
    
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result = await crawler.arun(
            url="https://example.com/login",
            config=run_config
        )
        print("成功爬取内容:", result.markdown)

if __name__ == "__main__":
    asyncio.run(main())

✨ 最新更新

版本0.7.0发布亮点 - 自适应智能更新

  • 🧠 自适应爬虫:新的爬虫系统能够自动学习和适应网站模式。
  • 🌊 虚拟滚动支持:全面提取来自无限滚动页面的内容。
  • 🔗 智能链接分析:采用三层评分机制,实现智能链接优先级。
  • 🎣 异步URL播种器:在数秒内发现数千个URL。

完整细节请查看我们的0.7.0发布说明

同类项目介绍

在开源领域,还有一些与Crawl4AI类似的项目,它们也致力于提供强大的数据抓取能力:

  1. Scrapy:一个开源网页抓取框架,支持深度爬取,扩展性强,具有良好的文档和社区支持。
  2. Beautiful Soup:主要用于解析HTML和XML文档,能够方便地进行数据提取。
  3. Playwright:支持自动化网页测试的框架,具有强大的交互功能,适合网页爬取和测试场景。

这些项目各有千秋,根据需求的不同可以选择适合的工具进行使用。


网站公告

今日签到

点亮在社区的每一天
去签到