Crawl4AI实战指南:面相大模型的智能爬虫工具

一、Crawl4AI简介
Crawl4AI 是一个开源的、对大语言模型(LLM)高度友好的网络爬虫和抓取工具。它的核心能力是将网页内容快速转换为清洁、结构化的 Markdown 格式,从而方便应用在 RAG(检索增强生成)、智能代理以及数据处理管道中。由于具备高效的数据处理能力,该项目在社区中已经获得超过 50,000 星的支持。
与传统爬虫相比,Crawl4AI 提供了高速、可控且资源感知的爬取功能。它不仅能在保持高效的同时降低系统资源消耗,还能通过强大的结构化数据提取技术,将复杂网页转化为高价值信息。对开发者而言,只需引入一个 Python 包即可轻松使用,降低了上手门槛。
文章首发公 众 号 【风间技术私享】 ,期待您的关注,欢迎加我好友。
二、实战案例
2.1 简单案例
Crawl4主要需要一个python包
pip install crawl4ai
首先来看一个最基础的示例。通过安装 Crawl4AI 并执行以下代码,就能将目标网页转化为干净的 Markdown 内容。
import asyncio
from crawl4ai import AsyncWebCrawler
from crawl4ai.async_configs import BrowserConfig, CrawlerRunConfig
async def main():
browser_config = BrowserConfig() # Default browser configuration
run_config = CrawlerRunConfig() # Default crawl run configuration
async with AsyncWebCrawler(config=browser_config) as crawler:
result = await crawler.arun(
url="https://blog.csdn.net/weixin_45399602/article/details/148739200",
config=run_config
)
print(result.markdown) # Print clean markdown content
if __name__ == "__main__":
asyncio.run(main())
效果如下

运行后,如果在 Windows 环境中遇到 Executable doesn't exist 的报错,则需要额外执行 playwright install 来完成浏览器依赖的安装。
windows下需要执行
playwright install
2.2 多种返回值
除了 Markdown,Crawl4AI 的 arun() 方法还会返回一个 CrawlResult 对象,其中包含丰富的属性,例如原始 HTML、清洗后的 HTML、提取的媒体资源与链接、HTTP 状态码等。借助这些信息,用户可以更灵活地处理爬取结果。
import asyncio
from crawl4ai import AsyncWebCrawler, DefaultMarkdownGenerator, PruningContentFilter
from crawl4ai.async_configs import BrowserConfig, CrawlerRunConfig
async def main():
browser_config = BrowserConfig() # Default browser configuration
run_config = CrawlerRunConfig(
markdown_generator=DefaultMarkdownGenerator(
content_filter=PruningContentFilter(threshold=0.6),
options={"ignore_links": True}
)
)
async with AsyncWebCrawler(config=browser_config) as crawler:
result = await crawler.arun(
url="https://blog.csdn.net/weixin_45399602/article/details/148739200",
config=run_config
)
print(result.markdown) # Print clean markdown content
print(result.html) # Raw HTML
print(result.cleaned_html) # Cleaned HTML
print(result.markdown.raw_markdown) # Raw markdown from cleaned html
print(result.markdown.fit_markdown) # Most relevant content in markdown
# Check success status
print(result.success) # True if crawl succeeded
print(result.status_code) # HTTP status code (e.g., 200, 404)
# Access extracted media and links
print(result.media) # Dictionary of found media (images, videos, audio)
print(result.links)
if __name__ == "__main__":
asyncio.run(main())
2.3 添加基本选项
在实际应用中,开发者往往需要根据场景自定义爬取行为。通过 CrawlerRunConfig,我们可以指定字数阈值、是否过滤外部链接、是否去除弹窗元素,以及是否处理 iframe 等。这些配置项使得爬取过程更加灵活可控。
import asyncio
from crawl4ai import AsyncWebCrawler, DefaultMarkdownGenerator, PruningContentFilter
from crawl4ai.async_configs import BrowserConfig, CrawlerRunConfig
async def main():
browser_config = BrowserConfig() # Default browser configuration
run_config = CrawlerRunConfig(
word_count_threshold=10, # Minimum words per content block
exclude_external_links=True, # Remove external links
remove_overlay_elements=True, # Remove popups/modals
process_iframes=True # Process iframe content
)
async with AsyncWebCrawler(config=browser_config) as crawler:
result = await crawler.arun(
url="https://blog.csdn.net/weixin_45399602/article/details/148739200",
config=run_config
)
print(result.markdown) # Print clean markdown content
if __name__ == "__main__":
asyncio.run(main())
三、Crawl4AI主要功能概览
- AI 优化 Markdown 生成
- 启发式过滤:自动去除噪声,保留准备用于 LLMs 摄入的内容。
- 结构化输出:生成带有正确引用和有序章节的 Markdown。
- 结构化数据提取
- 基于 CSS/XPath 的方法:快速解析网页中的重复元素。
- LLM 驱动提取:与流行的语言模型(例如 GPT-4、Llama)集成,用于复杂模式提取。
- 强大的浏览器集成
- 管理会话:通过持久浏览器配置文件保留认证状态和 cookies。
- 动态内容处理:执行 JavaScript 并支持懒加载内容,以实现全页抓取。
- 深度抓取策略
- 多种搜索策略:可选择广度优先搜索(BFS)、深度优先搜索(DFS)或最佳优先搜索方法。
- 内存自适应调度器:根据系统资源动态调整并发量,以防止过载。
- 易用性和部署
- 简单安装:通过 pip 或 Docker 安装,只需少量配置。
- 直观的 CLI:使用容易记住的命令从终端运行爬取。
四、数据分析案例
除了抓取数据,Crawl4AI 还可以直接服务于数据分析场景。例如,我们可以将目标 URL 的内容转化为 Markdown,再进一步统计其中的关键指标,如字数、标题数量和链接数量。
import asyncio
from crawl4ai import AsyncWebCrawler
async def crawl_site(url):
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url=url)
return result.markdown
# Example usage:
if __name__ == "__main__":
markdown_data = asyncio.run(crawl_site("https://blog.csdn.net/weixin_45399602/article/details/148739200"))
print(markdown_data)
上述代码片段获取并打印了示例 URL 的 Markdown 内容。
4.1 数据预处理和指标提取
我们随后处理 Markdown 数据,以提取诸如字数、标题数量和链接数量等关键指标。
增加下面的代码
import re
import pandas as pd
def analyze_markdown(markdown_text):
# 字符统计
word_count = len(markdown_text.split())
headings = [line for line in markdown_text.splitlines() if re.match(r"^#+\s", line)]
num_headings = len(headings)
links = re.findall(r"\[.*?\]\((.*?)\)", markdown_text)
num_links = len(links)
# 数据转换成成字典
metrics = {
"Word Count": word_count,
"Number of Headings": num_headings,
"Number of Links": num_links
}
return metrics
#分析数据
sample_metrics = analyze_markdown(markdown_data)
df_metrics = pd.DataFrame(list(sample_metrics.items()), columns=["Metric", "Value"])
print(df_metrics)
代码执行后获得如下效果

五、原理
以上述的案例来说,Crawl4整体的流程为:
供应商(输入) ─> 异步网页抓取器 ─> 基于 LLM 的提取器 ─> 结构化 JSON 输出 ─> (可选)Markdown ─> CSV
在Crawl4中,主要以下面四个组件组成:
AsyncWebCrawler: 协调并发网页爬取。LLMExtractionStrategy: 使用 GPT 模型提取结构化字段。BM25ContentFilter: 确保仅将相关内容传递给 LLMs。MarkdownGenerator: 可选的人性化预览渲染。
六、总结
Crawl4AI 的效率在与其传统爬虫性能对比时显而易见:
-
速度提升:得益于异步处理与内存自适应调度器,爬取效率最高可提升 6 倍;
动态扩展:能够根据可用资源动态调整并发任务数,确保在不同硬件条件下都能稳定运行;
应用价值:尤其适合实时应用和大规模数据提取任务。
这些优势对实时应用和大规模数据提取任务尤为有益。
更多的内容可以在官网查看。
更多推荐

所有评论(0)