🚀🤖 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 排版

相关推荐
湘美书院--湘美谈教育2 分钟前
湘美书院人工智能访谈录:成功解决一个对的问题
大数据·人工智能·深度学习·生活·ai写作
大伟先生6 分钟前
核心技能高效掌握与实战应用指南
人工智能·深度学习·自动化
淼澄研学8 分钟前
NVIDIA NeMo Guardrails 2.0实战:大模型安全护栏集成指南
人工智能·python·安全
数字会议深科技12 分钟前
集团总部如何集中管控全国分支机构的录音?——音频采录云管方案解析
开发语言·人工智能·会议解决方案·音频采录云管方案·集团·阵列麦克风·会议设备
捷智算云服务18 分钟前
深度解析Token:AI大模型交互的核心密钥
人工智能
苏灿烤鱼21 分钟前
AI 论文档案库|大模型与 Agent 周报
人工智能·agent
workflower21 分钟前
全球云计算产业发展态势-市场:云计算规模保持稳步增长,产业格局日趋明晰
人工智能·深度学习·机器学习·设计模式·机器人·云计算
大模型任我行23 分钟前
Meta:动态批大小提升训练效率
人工智能·语言模型·自然语言处理·论文笔记
北方的银狐-Zero24 分钟前
国内大厂都在吹的“本体产品“,到底假在哪儿?
人工智能·ai编程·本体论
lincats32 分钟前
智能体工程 vs 软件工程:计算机系那套课程,还能适应 AI 时代吗?
人工智能·软件工程·原型模式·vibecoding·claudecode·grillme