在当今数据驱动的世界中,获取和处理网页数据是许多AI项目和数据分析任务的核心需求。然而,传统的网页爬虫工具往往难以应对动态网页、复杂结构以及大规模数据提取的挑战。今天,我们将介绍一款专为LLM(大语言模型)和AI代理设计的开源网页爬虫工具------Crawl4AI。它不仅速度快、功能强大,还支持灵活的部署方式,是开发者们的理想选择。
🧐 为什么选择Crawl4AI?
Crawl4AI是一款专为AI开发者设计的网页爬虫工具,具有以下核心优势:
- 为LLM优化:生成简洁、结构化的Markdown内容,非常适合RAG(检索增强生成)和微调应用。
- 极速性能:比传统爬虫快6倍,实时处理数据,成本效益高。
- 灵活的浏览器控制:支持会话管理、代理和自定义钩子,确保无缝数据访问。
- 智能提取算法:使用先进的启发式算法,减少对昂贵模型的依赖。
- 开源且可部署:完全开源,无需API密钥,支持Docker和云集成。
- 活跃的社区支持:由活跃的社区维护,是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 排版