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

相关推荐
埃菲尔铁塔_CV算法10 分钟前
双线性插值算法:原理、实现、优化及在图像处理和多领域中的广泛应用与发展趋势(二)
c++·人工智能·算法·机器学习·计算机视觉
程序猿阿伟20 分钟前
《AI赋能鸿蒙Next,打造极致沉浸感游戏》
人工智能·游戏·harmonyos
遇健李的幸运36 分钟前
深入浅出:Agent如何调用工具——从OpenAI Function Call到CrewAI框架
人工智能
天天讯通38 分钟前
AI语音机器人大模型是什么?
人工智能·机器人
说私域1 小时前
微商关系维系与服务创新:链动2+1模式、AI智能名片与S2B2C商城小程序的应用研究
人工智能·小程序
人机与认知实验室1 小时前
人-AI协同如何重塑未来战争?
人工智能
学技术的大胜嗷1 小时前
小目标检测难点分析和解决策略
人工智能·目标检测·计算机视觉
李加号pluuuus2 小时前
【论文阅读+复现】High-fidelity Person-centric Subject-to-Image Synthesis
论文阅读·人工智能·计算机视觉
XianxinMao2 小时前
o3模型重大突破:引领推理语言模型新纪元,展望2025年AI发展新格局
人工智能·语言模型
martian6652 小时前
深入详解人工智能自然语言处理(NLP)之文本处理:分词、词性标注、命名实体识别
人工智能·自然语言处理