摘要:如今数据的价值越来越高,如何高效、精准地从海量数据中提取所需信息,成为了许多开发者,尤其是大模型领域关注的焦点。而爬虫技术作为一种重要的数据采集手段,其与 AI 与其相结合必将更为强大。Crawl4AI,就是一个结合了 LLM 技术的网络爬虫框架。
如今数据的价值越来越高,如何高效、精准地从海量数据中提取所需信息,成为了许多开发者,尤其是大模型领域关注的焦点。而爬虫技术作为一种重要的数据采集手段,其与 AI 与其相结合必将更为强大。Crawl4AI,就是一个结合了 LLM 技术的网络爬虫框架。
Crawl4AI 是一个开源的、对大语言模型(LLM)友好的网页爬虫和数据抓取器,其 GitHub 仓库地址为 https://github.com/unclecode/crawl4ai。它专为大语言模型、AI 智能体和数据管道设计,提供了快速且开箱即用的、基于 AI 的网页爬取功能。
Craw4AI 有以下特点:
专为大语言模型打造:能够生成针对 RAG和微调应用优化的、智能简洁的 Markdown 输出速度快性能高:能够提供实时级别的高效的数据产出,相比传统框架加速达到 6 倍灵活的浏览器控制:提供会话管理、代理和自定义钩子等,能够实现无缝的数据访问启发式智能:运用先进算法实现高效提取,减少对高成本模型的依赖开源且可部署:完全开源,无需 API 密钥,可随时与 Docker 和云平台进行集成蓬勃发展的社区:由活跃的社区积极维护Crawl4AI 使用简单,其是一个 Python 项目,首先进行安装,通过 pip 进行 crawl4ai 包的安装:
pip install -U crawl4ai也可以安装预发布版本来获得更为前沿的特性:
pip install crawl4ai --pre包安装完成后,进行基本的初始化设置,运行命令:
crawl4ai-setup运行结束后,验证安装是否成功:
crawl4ai-doctor安装过程中,如果遇到了与浏览器相关的问题,可以手动进行 playwright 相关的安装:
python -m playwright install --with-deps chromium安装完成后,可以编写脚本,运行一个最为简单的爬虫例子:
import asynciofrom crawl4ai import AsyncWebCrawlerfrom crawl4ai.async_configs import BrowserConfig, CrawlerRunConfigasync def main:browser_config = BrowserConfig # 默认的浏览器配置run_config = CrawlerRunConfig # 默认的爬虫运行配置async with AsyncWebCrawler(config=browser_config) as crawler:result = await crawler.arun(url="https://example.com",config=run_config)print(result.markdown) # Print clean markdown contentif __name__ == "__main__":asyncio.run(main)运行后,就能打印出从目标网站爬取的 Markdown 格式的结果了。
除了 Markdown 格式的输出外,Crawl4AI 也提供了多种的结果形式,能更好地进行结果处理:
result = await crawler.arun(url="https://example.com",config=CrawlerRunConfig(fit_markdown=True))# 不同的内容格式print(result.html) # Raw HTMLprint(result.cleaned_html) # Cleaned HTMLprint(result.markdown) # Markdown versionprint(result.fit_markdown) # Most relevant content in markdown# 检查成功与否print(result.success) # True if crawl succeededprint(result.status_code) # HTTP status code (e.g., 200, 404)# 提取媒体和链接print(result.media) # Dictionary of found media (images, videos, audio)print(result.links) # Dictionary of internal and external links除了默认的配置之外,还能进行定制化的爬取配置:
run_config = CrawlerRunConfig(word_count_threshold=10, # 每个内容块最少的词语数exclude_external_links=True, # 移除外部链接remove_overlay_elements=True, # 移除弹窗和对话框process_iframes=True # 处理 iframe 内容)result = await crawler.arun(url="https://example.com",config=run_config)Craw4AI 的特别之处在于,其能利用 LLM 进行基于智能策略的内容解析和抽取。举例而言,我们定义以下的 LLM 策略:
llm_strategy = LLMExtractionStrategy(provider="openai/gpt-4",api_token="YOUR_OPENAI_KEY",schema=MyModel.model_json_schema,extraction_type="schema",instruction="Extract a list of items from the text with 'name' and 'price' fields.",chunk_token_threshold=1200,overlap_rate=0.1,apply_chunking=True,input_format="html",extra_args={"temperature": 0.1, "max_tokens": 1000},verbose=True)在其中指定包括 LLM 模型的提供者等信息,然后提供一个指令 instruction,通过基于自然语言的方式,描述如何解析抽取所需的数据,而不需要像传统爬虫一样,自行编写解析器和规则。
使用时,把 llm_strategy 传入爬取运行配置中的 extraction_strategy,就能构建起一条完整的数据爬取流水线:
crawl_config = CrawlerRunConfig(extraction_strategy=llm_strategy,cache_mode=CacheMode.BYPASS)browser_cfg = BrowserConfig(headless=True)async with AsyncWebCrawler(config=browser_cfg) as crawler:result = await crawler.arun(url="https://example.com/products",config=crawl_config)if result.success:# 5. The extracted content is presumably JSONdata = json.loads(result.extracted_content)print("Extracted items:", data)# 6. Show usage statsllm_strategy.show_usage # prints token usageelse:print("Error:", result.error_message)if __name__ == "__main__":asyncio.run(main)Craw4AI 是一个功能强大且灵活的网页爬虫和抓取器库,其利用了热门的 LLM 大模型,把以往复杂多变的数据解析和抽取步骤,通过 AI 的能力大幅简化,大大提高了构建爬虫应用的效率。
Craw4AI 应用方向广泛。对于需要进行网页数据采集的开发者来说,它是一个非常不错的选择。无论是用于构建数据管道、为大语言模型提供训练数据,还是进行 AI 智能体的数据采集等,Craw4AI 都能发挥重要作用。同时,其丰富的文档和活跃的社区,也为开发者提供了良好的支持和帮助。
来源:每日开源代码