🚀🤖 Crawl4AI:开源LLM友好型网页爬虫与数据提取工具

在当今数据驱动的世界中,获取和处理网页数据是许多AI项目和数据分析任务的核心需求。然而,传统的网页爬虫工具往往难以应对动态网页、复杂结构以及大规模数据提取的挑战。今天,我们将介绍一款专为LLM(大语言模型)和AI代理设计的开源网页爬虫工具------Crawl4AI。它不仅速度快、功能强大,还支持灵活的部署方式,是开发者们的理想选择。


🧐 为什么选择Crawl4AI?

Crawl4AI是一款专为AI开发者设计的网页爬虫工具,具有以下核心优势:

  1. 为LLM优化:生成简洁、结构化的Markdown内容,非常适合RAG(检索增强生成)和微调应用。
  2. 极速性能:比传统爬虫快6倍,实时处理数据,成本效益高。
  3. 灵活的浏览器控制:支持会话管理、代理和自定义钩子,确保无缝数据访问。
  4. 智能提取算法:使用先进的启发式算法,减少对昂贵模型的依赖。
  5. 开源且可部署:完全开源,无需API密钥,支持Docker和云集成。
  6. 活跃的社区支持:由活跃的社区维护,是GitHub上最热门的开源项目之一。

🚀 快速上手

1. 安装Crawl4AI

首先,通过以下命令安装Crawl4AI:

bash 复制代码
# 安装包
pip install -U crawl4ai

# 运行安装后设置
crawl4ai-setup

# 验证安装
crawl4ai-doctor

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

csharp 复制代码
python -m playwright install --with-deps chromium

2. 运行一个简单的网页爬取任务

以下是一个简单的异步爬取示例:

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())

✨ 核心功能

📝 Markdown生成

  • 干净的Markdown:生成结构清晰、格式准确的Markdown内容。
  • 智能过滤:通过启发式算法去除噪音内容,生成适合AI处理的Markdown。
  • 引用和参考文献:将页面链接转换为带编号的引用列表。
  • 自定义策略:支持用户自定义Markdown生成策略。
  • BM25算法:基于BM25的过滤算法,提取核心信息并去除无关内容。

📊 结构化数据提取

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

🌐 浏览器集成

  • 浏览器管理:支持用户自有浏览器,避免被检测为机器人。
  • 远程浏览器控制:通过Chrome开发者工具协议进行远程大规模数据提取。
  • 会话管理:保存浏览器状态,支持多步骤爬取。
  • 代理支持:无缝连接代理服务器,确保安全访问。
  • 多浏览器支持:兼容Chromium、Firefox和WebKit。

🔎 爬取与数据提取

  • 媒体支持:提取图片、音频、视频和响应式图片格式。
  • 动态爬取:执行JavaScript并等待异步内容加载。
  • 截图功能:在爬取过程中捕获页面截图。
  • 原始数据爬取:直接处理原始HTML或本地文件。
  • 链接提取:提取内部、外部链接和嵌入式iframe内容。

🚀 部署方式

🐳 Docker部署

Crawl4AI提供了优化的Docker镜像,支持一键部署API服务器。以下是快速测试的示例:

ini 复制代码
import requests

# 提交爬取任务
response = requests.post(
    "http://localhost:11235/crawl",
    json={"urls": "https://example.com", "priority": 10}
)
task_id = response.json()["task_id"]

# 轮询任务状态
result = requests.get(f"http://localhost:11235/task/{task_id}")

🔬 高级用法示例

1. 使用启发式算法生成Markdown

ini 复制代码
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
from crawl4ai.content_filter_strategy import PruningContentFilter, BM25ContentFilter
from crawl4ai.markdown_generation_strategy import DefaultMarkdownGenerator

async def main():
    browser_config = BrowserConfig(
        headless=True,  
        verbose=True,
    )
    run_config = CrawlerRunConfig(
        cache_mode=CacheMode.ENABLED,
        markdown_generator=DefaultMarkdownGenerator(
            content_filter=PruningContentFilter(threshold=0.48, threshold_type="fixed", min_word_threshold=0)
        ),
    )
    
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result = await crawler.arun(
            url="https://docs.micronaut.io/4.7.6/guide/",
            config=run_config
        )
        print(len(result.markdown))
        print(len(result.fit_markdown))
        print(len(result.markdown_v2.fit_markdown))

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

2. 使用LLM提取结构化数据

ini 复制代码
import os
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
from crawl4ai.extraction_strategy import LLMExtractionStrategy
from pydantic import BaseModel, Field

class OpenAIModelFee(BaseModel):
    model_name: str = Field(..., description="Name of the OpenAI model.")
    input_fee: str = Field(..., description="Fee for input token for the OpenAI model.")
    output_fee: str = Field(..., description="Fee for output token for the OpenAI model.")

async def main():
    browser_config = BrowserConfig(verbose=True)
    run_config = CrawlerRunConfig(
        word_count_threshold=1,
        extraction_strategy=LLMExtractionStrategy(
            provider="openai/gpt-4o", api_token=os.getenv('OPENAI_API_KEY'), 
            schema=OpenAIModelFee.schema(),
            extraction_type="schema",
            instruction="""From the crawled content, extract all mentioned model names along with their fees for input and output tokens."""
        ),            
        cache_mode=CacheMode.BYPASS,
    )
    
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result = await crawler.arun(
            url='https://openai.com/api/pricing/',
            config=run_config
        )
        print(result.extracted_content)

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

🎯 同类项目对比

1. Scrapy

  • 功能:Scrapy是一个强大的Python爬虫框架,支持大规模数据抓取。
  • 特点:适合复杂的爬取任务,但需要较高的学习曲线。
  • 不足:对动态网页的支持较弱,依赖第三方插件。

2. BeautifulSoup

  • 功能:主要用于HTML和XML解析,适合小规模数据提取。
  • 特点:简单易用,适合初学者。
  • 不足:不支持动态内容加载,功能较为基础。

3. Selenium

  • 功能:支持浏览器自动化,适合动态网页抓取。
  • 特点:功能强大,支持多种浏览器。
  • 不足:性能较低,不适合大规模爬取任务。

相比之下,Crawl4AI结合了Scrapy的强大功能和Selenium的动态网页处理能力,同时优化了性能和部署方式,是AI开发者的理想选择。


📖 总结

Crawl4AI是一款专为AI开发者设计的开源网页爬虫工具,凭借其极速性能、灵活的浏览器控制和智能提取算法,成为GitHub上最热门的项目之一。无论你是需要处理动态网页、提取结构化数据,还是部署大规模爬取任务,Crawl4AI都能满足你的需求。快来试试吧!

✨ 访问我们的文档网站获取更多信息,或直接在Colab上体验Crawl4AI的强大功能!

Happy Crawling! 🕸️🚀

本文使用 markdown.com.cn 排版

相关推荐
阿里云大数据AI技术3 分钟前
云栖实录 | 从多模态数据到 Physical AI,PAI 助力客户快速启动 Physical AI 实践
人工智能
小关会打代码10 分钟前
计算机视觉进阶教学之颜色识别
人工智能·计算机视觉
IT小哥哥呀16 分钟前
基于深度学习的数字图像分类实验与分析
人工智能·深度学习·分类
机器之心41 分钟前
VAE时代终结?谢赛宁团队「RAE」登场,表征自编码器或成DiT训练新基石
人工智能·openai
机器之心42 分钟前
Sutton判定「LLM是死胡同」后,新访谈揭示AI困境
人工智能·openai
大模型真好玩1 小时前
低代码Agent开发框架使用指南(四)—Coze大模型和插件参数配置最佳实践
人工智能·agent·coze
jerryinwuhan1 小时前
基于大语言模型(LLM)的城市时间、空间与情感交织分析:面向智能城市的情感动态预测与空间优化
人工智能·语言模型·自然语言处理
落雪财神意1 小时前
股指10月想法
大数据·人工智能·金融·区块链·期股
中杯可乐多加冰1 小时前
无代码开发实践|基于业务流能力快速开发市场监管系统,实现投诉处理快速响应
人工智能·低代码
渣渣盟1 小时前
解密NLP:从入门到精通
人工智能·python·nlp